absolutetimedateformat.h | absolutetimedateformat.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | #ifndef _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | |||
#define _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | #define _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | |||
#include <log4cxx/helpers/dateformat.h> | #include <log4cxx/helpers/simpledateformat.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Formats a date in the format <b>%H:%M:%S,%Q</b> for example, | Formats a date in the format <b>HH:mm:ss,SSS</b> for exampl | |||
"15:49:37,459". | e, | |||
*/ | "15:49:37,459". | |||
class LOG4CXX_EXPORT AbsoluteTimeDateFormat : public DateFor | */ | |||
mat | class LOG4CXX_EXPORT AbsoluteTimeDateFormat : public Simple | |||
{ | DateFormat | |||
public: | { | |||
/** | public: | |||
string constant used to specify | AbsoluteTimeDateFormat() | |||
ISO8601DateFormat in layouts. Current | : SimpleDateFormat(LOG4CXX_STR("HH:mm:ss,SSS")) {} | |||
value is <b>ISO8601</b>. | }; | |||
*/ | } // namespace helpers | |||
static String ISO8601_DATE_FORMAT; | } // namespace log4cxx | |||
/** | ||||
String constant used to specify | ||||
AbsoluteTimeDateFormat in layouts. Current | ||||
value is <b>ABSOLUTE</b>. */ | ||||
static String ABS_TIME_DATE_FORMAT; | ||||
/** | ||||
String constant used to specify | ||||
DateTimeDateFormat in layouts. Current | ||||
value is <b>DATE</b>. | ||||
*/ | ||||
static String DATE_AND_TIME_DATE_FORMAT; | ||||
AbsoluteTimeDateFormat(const TimeZonePtr& timeZone) | ||||
: DateFormat(_T("%H:%M:%S,%Q"), timeZone) {} | ||||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | #endif // _LOG4CXX_HELPERS_ABSOLUTE_TIME_DATE_FORMAT_H | |||
End of changes. 3 change blocks. | ||||
41 lines changed or deleted | 23 lines changed or added | |||
appender.h | appender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_APPENDER_H | #ifndef _LOG4CXX_APPENDER_H | |||
#define _LOG4CXX_APPENDER_H | #define _LOG4CXX_APPENDER_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/optionhandler.h> | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <vector> | #include <vector> | |||
#include <log4cxx/spi/optionhandler.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
// Forward declarations | // Forward declarations | |||
namespace spi | namespace spi | |||
{ | { | |||
class LoggingEvent; | class LoggingEvent; | |||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | |||
class Filter; | class Filter; | |||
typedef helpers::ObjectPtrT<Filter> FilterPtr; | typedef helpers::ObjectPtrT<Filter> FilterPtr; | |||
class ErrorHandler; | class ErrorHandler; | |||
typedef log4cxx::helpers::ObjectPtrT<ErrorHandler> ErrorHand lerPtr; | typedef log4cxx::helpers::ObjectPtrT<ErrorHandler> ErrorHan dlerPtr; | |||
} | } | |||
class Layout; | class Layout; | |||
typedef log4cxx::helpers::ObjectPtrT<Layout> LayoutPtr; | typedef log4cxx::helpers::ObjectPtrT<Layout> LayoutPtr; | |||
class Appender; | /** | |||
typedef log4cxx::helpers::ObjectPtrT<Appender> AppenderPtr; | Implement this interface for your own strategies for outputting log | |||
typedef std::vector<AppenderPtr> AppenderList; | statements. | |||
*/ | ||||
/** | ||||
Implement this interface for your own strategies for outputting log | ||||
statements. | ||||
*/ | ||||
class LOG4CXX_EXPORT Appender : | class LOG4CXX_EXPORT Appender : | |||
public virtual spi::OptionHandler | public virtual spi::OptionHandler | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Appender) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(Appender) | |||
virtual ~Appender() {} | ||||
virtual ~Appender() {} | ||||
/** | /** | |||
Add a filter to the end of the filter list. | Add a filter to the end of the filter list. | |||
*/ | */ | |||
virtual void addFilter(const spi::FilterPtr& newFilter) = 0; | virtual void addFilter(const spi::FilterPtr& newFilter) = 0; | |||
/** | /** | |||
Returns the head Filter. The Filters are organized in a linked lis t | Returns the head Filter. The Filters are organized in a linked lis t | |||
and so all Filters on this Appender are available through the resu lt. | and so all Filters on this Appender are available through the resu lt. | |||
@return the head Filter or null, if no Filters are present | @return the head Filter or null, if no Filters are present | |||
*/ | */ | |||
virtual const spi::FilterPtr& getFilter() const = 0; | virtual spi::FilterPtr getFilter() const = 0; | |||
/** | /** | |||
Clear the list of filters by removing all the filters in it. | Clear the list of filters by removing all the filters in it. | |||
*/ | */ | |||
virtual void clearFilters() = 0; | virtual void clearFilters() = 0; | |||
/** | /** | |||
Release any resources allocated within the appender such as file | Release any resources allocated within the appender such as file | |||
handles, network connections, etc. | handles, network connections, etc. | |||
<p>It is a programming error to append to a closed appender. | <p>It is a programming error to append to a closed appender. | |||
*/ | */ | |||
virtual void close() = 0; | virtual void close() = 0; | |||
/** | /** | |||
Log in <code>Appender</code> specific way. When appropriate, | Log in <code>Appender</code> specific way. When appropriate, | |||
Loggers will call the <code>doAppend</code> method of appender | Loggers will call the <code>doAppend</code> method of appender | |||
implementations in order to log. | implementations in order to log. | |||
*/ | */ | |||
virtual void doAppend(const spi::LoggingEventPtr& event) = 0; | virtual void doAppend(const spi::LoggingEventPtr& event, | |||
log4cxx::helpers::Pool& pool) = 0; | ||||
/** | /** | |||
Get the name of this appender. The name uniquely identifies the | Get the name of this appender. The name uniquely identifies the | |||
appender. | appender. | |||
*/ | */ | |||
virtual const String& getName() const = 0; | virtual LogString getName() const = 0; | |||
/** | ||||
Set the {@link spi::ErrorHandler ErrorHandler} for this appender. | ||||
*/ | ||||
virtual void setErrorHandler(const spi::ErrorHandlerPtr& errorHandl | ||||
er) = 0; | ||||
/** | ||||
Returns the {@link spi::ErrorHandler ErrorHandler} for this append | ||||
er. | ||||
*/ | ||||
virtual const spi::ErrorHandlerPtr& getErrorHandler() const = 0; | ||||
/** | /** | |||
Set the Layout for this appender. | Set the Layout for this appender. | |||
*/ | */ | |||
virtual void setLayout(const LayoutPtr& layout) = 0; | virtual void setLayout(const LayoutPtr& layout) = 0; | |||
/** | /** | |||
Returns this appenders layout. | Returns this appenders layout. | |||
*/ | */ | |||
virtual const LayoutPtr& getLayout() const = 0; | virtual LayoutPtr getLayout() const = 0; | |||
/** | /** | |||
Set the name of this appender. The name is used by other | Set the name of this appender. The name is used by other | |||
components to identify this appender. | components to identify this appender. | |||
*/ | */ | |||
virtual void setName(const String& name) = 0; | virtual void setName(const LogString& name) = 0; | |||
/** | /** | |||
Configurators call this method to determine if the appender | Configurators call this method to determine if the appender | |||
requires a layout. If this method returns <code>true</code>, | requires a layout. If this method returns <code>true</code>, | |||
meaning that layout is required, then the configurator will | meaning that layout is required, then the configurator will | |||
configure an layout using the configuration information at its | configure an layout using the configuration information at its | |||
disposal. If this method returns <code>false</code>, meaning that | disposal. If this method returns <code>false</code>, meaning that | |||
a layout is not required, then layout configuration will be | a layout is not required, then layout configuration will be | |||
skipped even if there is available layout configuration | skipped even if there is available layout configuration | |||
information at the disposal of the configurator.. | information at the disposal of the configurator.. | |||
<p>In the rather exceptional case, where the appender | <p>In the rather exceptional case, where the appender | |||
implementation admits a layout but can also work without it, then | implementation admits a layout but can also work without it, then | |||
the appender should return <code>true</code>. | the appender should return <code>true</code>. | |||
*/ | */ | |||
virtual bool requiresLayout() const = 0; | virtual bool requiresLayout() const = 0; | |||
}; | }; | |||
LOG4CXX_PTR_DEF(Appender); | ||||
LOG4CXX_LIST_DEF(AppenderList, AppenderPtr); | ||||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_APPENDER_H | #endif //_LOG4CXX_APPENDER_H | |||
End of changes. 15 change blocks. | ||||
37 lines changed or deleted | 36 lines changed or added | |||
appenderattachable.h | appenderattachable.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | #ifndef _LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | |||
#define _LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | #define _LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <vector> | #include <vector> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <log4cxx/appender.h> | #include <log4cxx/appender.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
// Forward Declarations | ||||
class Appender; | ||||
typedef helpers::ObjectPtrT<Appender> AppenderPtr; | ||||
typedef std::vector<AppenderPtr> AppenderList; | ||||
namespace spi | namespace spi | |||
{ | { | |||
class AppenderAttachable; | ||||
typedef helpers::ObjectPtrT<AppenderAttachable> AppenderAtta | ||||
chablePtr; | ||||
/** | /** | |||
* This Interface is for attaching Appenders to objects. | * This Interface is for attaching Appenders to objects. | |||
*/ | */ | |||
class LOG4CXX_EXPORT AppenderAttachable : public virtual helpers::O bject | class LOG4CXX_EXPORT AppenderAttachable : public virtual helpers::O bject | |||
{ | { | |||
public: | public: | |||
// Methods | // Methods | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderAttachable) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderAttachable) | |||
/** | /** | |||
* Add an appender. | * Add an appender. | |||
*/ | */ | |||
virtual void addAppender(const AppenderPtr& newAppender) = 0; | virtual void addAppender(const AppenderPtr& newAppender) = 0; | |||
/** | /** | |||
* Get all previously added appenders as an AppenderList. | * Get all previously added appenders as an AppenderList. | |||
*/ | */ | |||
virtual AppenderList getAllAppenders() const = 0; | virtual AppenderList getAllAppenders() const = 0; | |||
/** | /** | |||
* Get an appender by name. | * Get an appender by name. | |||
*/ | */ | |||
virtual AppenderPtr getAppender(const String& name) const = 0; | virtual AppenderPtr getAppender(const LogString& name) const = 0; | |||
/** | /** | |||
Returns <code>true</code> if the specified appender | Returns <code>true</code> if the specified appender is in list of | |||
is in list of | attached attached, <code>false</code> otherwise. | |||
attached attached, <code>false</code> otherwise. | */ | |||
*/ | virtual bool isAttached(const AppenderPtr& appender) const = 0; | |||
virtual bool isAttached(const AppenderPtr& appender) | ||||
const = 0; | ||||
/** | /** | |||
* Remove all previously added appenders. | * Remove all previously added appenders. | |||
*/ | */ | |||
virtual void removeAllAppenders() = 0; | virtual void removeAllAppenders() = 0; | |||
/** | /** | |||
* Remove the appender passed as parameter from the list of app enders. | * Remove the appender passed as parameter from the list of app enders. | |||
*/ | */ | |||
virtual void removeAppender(const AppenderPtr& appender) = 0; | virtual void removeAppender(const AppenderPtr& appender) = 0; | |||
/** | /** | |||
* Remove the appender with the name passed as parameter from t he | * Remove the appender with the name passed as parameter from t he | |||
* list of appenders. | * list of appenders. | |||
*/ | */ | |||
virtual void removeAppender(const String& name) = 0; | virtual void removeAppender(const LogString& name) = 0; | |||
// Dtor | // Dtor | |||
virtual ~AppenderAttachable(){} | virtual ~AppenderAttachable(){} | |||
}; | }; | |||
LOG4CXX_PTR_DEF(AppenderAttachable); | ||||
} | } | |||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | #endif //_LOG4CXX_SPI_APPENDER_ATTACHABLE_H_ | |||
End of changes. 10 change blocks. | ||||
22 lines changed or deleted | 26 lines changed or added | |||
appenderattachableimpl.h | appenderattachableimpl.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | #ifndef _LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | |||
#define _LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | #define _LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/appenderattachable.h> | #include <log4cxx/spi/appenderattachable.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/mutex.h> | ||||
#include <log4cxx/helpers/pool.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class LoggingEvent; | class LoggingEvent; | |||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | |||
} | } | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class AppenderAttachableImpl; | ||||
typedef log4cxx::helpers::ObjectPtrT<AppenderAttachableImpl> | ||||
AppenderAttachableImplPtr; | ||||
class LOG4CXX_EXPORT AppenderAttachableImpl : | class LOG4CXX_EXPORT AppenderAttachableImpl : | |||
public virtual spi::AppenderAttachable, | public virtual spi::AppenderAttachable, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
protected: | protected: | |||
/** Array of appenders. */ | /** Array of appenders. */ | |||
AppenderList appenderList; | AppenderList appenderList; | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(AppenderAttachableImpl) | /** | |||
BEGIN_LOG4CXX_CAST_MAP() | * Create new instance. | |||
LOG4CXX_CAST_ENTRY(AppenderAttachableImpl) | * @param pool pool, must be longer-lived than instance. | |||
LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | */ | |||
END_LOG4CXX_CAST_MAP() | AppenderAttachableImpl(Pool& pool); | |||
// Methods | DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderAttachableImpl) | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(AppenderAttachableImpl) | ||||
LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | ||||
END_LOG4CXX_CAST_MAP() | ||||
void addRef() const; | ||||
void releaseRef() const; | ||||
// Methods | ||||
/** | /** | |||
* Add an appender. | * Add an appender. | |||
*/ | */ | |||
virtual void addAppender(const AppenderPtr& newAppender); | virtual void addAppender(const AppenderPtr& newAppender); | |||
/** | /** | |||
Call the <code>doAppend</code> method on all attached appender s. | Call the <code>doAppend</code> method on all attached appender s. | |||
*/ | */ | |||
int appendLoopOnAppenders(const spi::LoggingEventPtr& event); | int appendLoopOnAppenders(const spi::LoggingEventPtr& event, | |||
log4cxx::helpers::Pool& p); | ||||
/** | /** | |||
* Get all previously added appenders as an Enumeration. | * Get all previously added appenders as an Enumeration. | |||
*/ | */ | |||
virtual AppenderList getAllAppenders() const; | virtual AppenderList getAllAppenders() const; | |||
/** | /** | |||
* Get an appender by name. | * Get an appender by name. | |||
*/ | */ | |||
virtual AppenderPtr getAppender(const String& name) const; | virtual AppenderPtr getAppender(const LogString& name) const; | |||
/** | /** | |||
Returns <code>true</code> if the specified appender is in the | Returns <code>true</code> if the specified appender is in the | |||
list of attached appenders, <code>false</code> otherwise. | list of attached appenders, <code>false</code> otherwise. | |||
*/ | */ | |||
virtual bool isAttached(const AppenderPtr& appender) const; | virtual bool isAttached(const AppenderPtr& appender) const; | |||
/** | /** | |||
* Remove all previously added appenders. | * Remove all previously added appenders. | |||
*/ | */ | |||
skipping to change at line 93 | skipping to change at line 108 | |||
/** | /** | |||
* Remove the appender passed as parameter from the list of app enders. | * Remove the appender passed as parameter from the list of app enders. | |||
*/ | */ | |||
virtual void removeAppender(const AppenderPtr& appender); | virtual void removeAppender(const AppenderPtr& appender); | |||
/** | /** | |||
* Remove the appender with the name passed as parameter from t he | * Remove the appender with the name passed as parameter from t he | |||
* list of appenders. | * list of appenders. | |||
*/ | */ | |||
virtual void removeAppender(const String& name); | virtual void removeAppender(const LogString& name); | |||
inline const log4cxx::helpers::Mutex& getMutex() const { return | ||||
mutex; } | ||||
private: | ||||
log4cxx::helpers::Mutex mutex; | ||||
AppenderAttachableImpl(const AppenderAttachableImpl&); | ||||
AppenderAttachableImpl& operator=(const AppenderAttachableImpl& | ||||
); | ||||
}; | }; | |||
LOG4CXX_PTR_DEF(AppenderAttachableImpl); | ||||
} | } | |||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | #endif //_LOG4CXX_HELPERS_APPENDER_ATTACHABLE_IMPL_H | |||
End of changes. 12 change blocks. | ||||
20 lines changed or deleted | 51 lines changed or added | |||
appenderskeleton.h | appenderskeleton.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_APPENDER_SKELETON_H | #ifndef _LOG4CXX_APPENDER_SKELETON_H | |||
#define _LOG4CXX_APPENDER_SKELETON_H | #define _LOG4CXX_APPENDER_SKELETON_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/appender.h> | #include <log4cxx/appender.h> | |||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
#include <log4cxx/spi/errorhandler.h> | #include <log4cxx/spi/errorhandler.h> | |||
#include <log4cxx/spi/filter.h> | #include <log4cxx/spi/filter.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/mutex.h> | ||||
#include <log4cxx/helpers/pool.h> | ||||
#include <log4cxx/level.h> | #include <log4cxx/level.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
/** | /** | |||
* Implementation base class for all appenders. | * Implementation base class for all appenders. | |||
* | * | |||
* This class provides the code for common functionality, such as | * This class provides the code for common functionality, such as | |||
* support for threshold filtering and support for general filters. | * support for threshold filtering and support for general filters. | |||
* */ | * */ | |||
class LOG4CXX_EXPORT AppenderSkeleton : | class LOG4CXX_EXPORT AppenderSkeleton : | |||
public virtual Appender, | public virtual Appender, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
protected: | protected: | |||
/** The layout variable does not need to be set if the appen | /** The layout variable does not need to be set if the appe | |||
der | nder | |||
implementation has its own layout. */ | implementation has its own layout. */ | |||
LayoutPtr layout; | LayoutPtr layout; | |||
/** Appenders are named. */ | /** Appenders are named. */ | |||
String name; | LogString name; | |||
/** | /** | |||
There is no level threshold filtering by default. */ | There is no level threshold filtering by default. */ | |||
LevelPtr threshold; | LevelPtr threshold; | |||
/** | /** | |||
It is assumed and enforced that errorHandler is never null. | It is assumed and enforced that errorHandler is never null. | |||
*/ | */ | |||
spi::ErrorHandlerPtr errorHandler; | spi::ErrorHandlerPtr errorHandler; | |||
/** The first filter in the filter chain. Set to <code>null< | /** The first filter in the filter chain. Set to <code>null | |||
/code> | </code> | |||
initially. */ | initially. */ | |||
spi::FilterPtr headFilter; | spi::FilterPtr headFilter; | |||
/** The last filter in the filter chain. */ | /** The last filter in the filter chain. */ | |||
spi::FilterPtr tailFilter; | spi::FilterPtr tailFilter; | |||
/** | /** | |||
Is this appender closed? | Is this appender closed? | |||
*/ | */ | |||
bool closed; | bool closed; | |||
public: | log4cxx::helpers::Pool pool; | |||
BEGIN_LOG4CXX_CAST_MAP() | log4cxx::helpers::Mutex mutex; | |||
LOG4CXX_CAST_ENTRY(Appender) | ||||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | ||||
END_LOG4CXX_CAST_MAP() | ||||
AppenderSkeleton(); | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(AppenderSkeleton) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Appender) | ||||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | AppenderSkeleton(); | |||
Finalize this appender by calling the derived class' | AppenderSkeleton(const LayoutPtr& layout); | |||
<code>close</code> method. | ||||
*/ | ||||
void finalize(); | ||||
/** | void addRef() const; | |||
Derived appenders should override this method if option stru | void releaseRef() const; | |||
cture | ||||
requires it. | ||||
*/ | ||||
void activateOptions() {} | ||||
void setOption(const String& name, const String& value) {} | ||||
/** | /** | |||
Add a filter to end of the filter list. | Finalize this appender by calling the derived class' | |||
*/ | <code>close</code> method. | |||
void addFilter(const spi::FilterPtr& newFilter) ; | */ | |||
void finalize(); | ||||
/** | /** | |||
Subclasses of <code>AppenderSkeleton</code> should implement | Derived appenders should override this method if option str | |||
this | ucture | |||
method to perform actual logging. See also AppenderSkeleton: | requires it. | |||
:doAppend | */ | |||
method. | virtual void activateOptions(log4cxx::helpers::Pool& /* poo | |||
*/ | l */) {} | |||
protected: | virtual void setOption(const LogString& option, const LogSt | |||
virtual void append(const spi::LoggingEventPtr& event) = 0; | ring& value); | |||
/** | /** | |||
Clear the filters chain. | Add a filter to end of the filter list. | |||
*/ | */ | |||
public: | void addFilter(const spi::FilterPtr& newFilter) ; | |||
void clearFilters(); | ||||
/** | /** | |||
Return the currently set spi::ErrorHandler for this | Subclasses of <code>AppenderSkeleton</code> should implemen | |||
Appender. | t this | |||
*/ | method to perform actual logging. See also AppenderSkeleton | |||
const spi::ErrorHandlerPtr& getErrorHandler() const { return | ::doAppend | |||
errorHandler; } | method. | |||
*/ | ||||
protected: | ||||
virtual void append(const spi::LoggingEventPtr& event, log4 | ||||
cxx::helpers::Pool& p) = 0; | ||||
/** | /** | |||
Returns the head Filter. | Clear the filters chain. | |||
*/ | */ | |||
const spi::FilterPtr& getFilter() const { return headFilter; | public: | |||
} | void clearFilters(); | |||
/** | /** | |||
Return the first filter in the filter chain for this | Return the currently set spi::ErrorHandler for this | |||
Appender. The return value may be <code>0</code> if no is | Appender. | |||
filter is set. | */ | |||
*/ | const spi::ErrorHandlerPtr& getErrorHandler() const { retur | |||
const spi::FilterPtr& getFirstFilter() const { return headFi | n errorHandler; } | |||
lter; } | ||||
/** | /** | |||
Returns the layout of this appender. The value may be 0. | Returns the head Filter. | |||
*/ | */ | |||
const LayoutPtr& getLayout() const { return layout; } | spi::FilterPtr getFilter() const { return headFilter; } | |||
/** | /** | |||
Returns the name of this Appender. | Return the first filter in the filter chain for this | |||
*/ | Appender. The return value may be <code>0</code> if no is | |||
const String& getName() const { return name; } | filter is set. | |||
*/ | ||||
const spi::FilterPtr& getFirstFilter() const { return headF | ||||
ilter; } | ||||
/** | /** | |||
Returns this appenders threshold level. See the #setThreshol | Returns the layout of this appender. The value may be 0. | |||
d | */ | |||
method for the meaning of this option. | LayoutPtr getLayout() const { return layout; } | |||
*/ | ||||
const LevelPtr& getThreshold() { return threshold; } | ||||
/** | /** | |||
Check whether the message level is below the appender's | Returns the name of this Appender. | |||
threshold. If there is no threshold set, then the return val | */ | |||
ue is | LogString getName() const { return name; } | |||
always <code>true</code>. | ||||
*/ | ||||
bool isAsSevereAsThreshold(const LevelPtr& level) const; | ||||
/** | /** | |||
* This method performs threshold checks and invokes filters | Returns this appenders threshold level. See the #setThresho | |||
before | ld | |||
* delegating actual logging to the subclasses specific | method for the meaning of this option. | |||
* AppenderSkeleton#append method. | */ | |||
* */ | const LevelPtr& getThreshold() { return threshold; } | |||
void doAppend(const spi::LoggingEventPtr& event); | ||||
/** | /** | |||
Set the {@link spi::ErrorHandler ErrorHandler} for this Appe | Check whether the message level is below the appender's | |||
nder. | threshold. If there is no threshold set, then the return va | |||
*/ | lue is | |||
void setErrorHandler(const spi::ErrorHandlerPtr& eh); | always <code>true</code>. | |||
*/ | ||||
bool isAsSevereAsThreshold(const LevelPtr& level) const; | ||||
/** | /** | |||
Set the layout for this appender. Note that some appenders h | * This method performs threshold checks and invokes filters | |||
ave | before | |||
their own (fixed) layouts or do not use one. For example, th | * delegating actual logging to the subclasses specific | |||
e | * AppenderSkeleton#append method. | |||
{@link net::SocketAppender SocketAppender} ignores the layou | * */ | |||
t set | void doAppend(const spi::LoggingEventPtr& event, log4cxx::h | |||
here. | elpers::Pool& pool); | |||
*/ | ||||
void setLayout(const LayoutPtr& layout) { this->layout = lay | ||||
out; } | ||||
/** | /** | |||
Set the name of this Appender. | Set the {@link spi::ErrorHandler ErrorHandler} for this App | |||
*/ | ender. | |||
void setName(const String& name) { this->name = name; } | */ | |||
void setErrorHandler(const spi::ErrorHandlerPtr& eh); | ||||
/** | /** | |||
Set the threshold level. All log events with lower level | Set the layout for this appender. Note that some appenders | |||
than the threshold level are ignored by the appender. | have | |||
their own (fixed) layouts or do not use one. For example, t | ||||
he | ||||
{@link net::SocketAppender SocketAppender} ignores the layo | ||||
ut set | ||||
here. | ||||
*/ | ||||
void setLayout(const LayoutPtr& layout1) { this->layout = l | ||||
ayout1; } | ||||
<p>In configuration files this option is specified by settin | /** | |||
g the | Set the name of this Appender. | |||
value of the <b>Threshold</b> option to a level | */ | |||
string, such as "DEBUG", "INFO" and so on. | void setName(const LogString& name1) { this->name.assign(na | |||
*/ | me1); } | |||
void setThreshold(const LevelPtr& threshold); | ||||
}; // class AppenderSkeleton | /** | |||
Set the threshold level. All log events with lower level | ||||
than the threshold level are ignored by the appender. | ||||
<p>In configuration files this option is specified by setti | ||||
ng the | ||||
value of the <b>Threshold</b> option to a level | ||||
string, such as "DEBUG", "INFO" and so on. | ||||
*/ | ||||
void setThreshold(const LevelPtr& threshold); | ||||
}; // class AppenderSkeleton | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_APPENDER_SKELETON_H | #endif //_LOG4CXX_APPENDER_SKELETON_H | |||
End of changes. 31 change blocks. | ||||
151 lines changed or deleted | 176 lines changed or added | |||
asyncappender.h | asyncappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_ASYNC_APPENDER_H | #ifndef _LOG4CXX_ASYNC_APPENDER_H | |||
#define _LOG4CXX_ASYNC_APPENDER_H | #define _LOG4CXX_ASYNC_APPENDER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/appenderattachableimpl.h> | #include <log4cxx/helpers/appenderattachableimpl.h> | |||
#include <deque> | ||||
#include <log4cxx/spi/loggingevent.h> | ||||
#include <log4cxx/helpers/thread.h> | #include <log4cxx/helpers/thread.h> | |||
#include <log4cxx/helpers/mutex.h> | ||||
#include <log4cxx/helpers/condition.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | ||||
{ | ||||
class BoundedFIFO; | ||||
typedef ObjectPtrT<BoundedFIFO> BoundedFIFOPtr; | ||||
} | ||||
class Dispatcher; | /** | |||
typedef helpers::ObjectPtrT<Dispatcher> DispatcherPtr; | The AsyncAppender lets users log events asynchronously. It uses a | |||
bounded buffer to store logging events. | ||||
class AsyncAppender; | <p>The AsyncAppender will collect the events sent to it and then | |||
typedef helpers::ObjectPtrT<AsyncAppender> AsyncAppenderPtr; | dispatch them to all the appenders that are attached to it. You can | |||
attach multiple appenders to an AsyncAppender. | ||||
/** | <p>The AsyncAppender uses a separate thread to serve the events in | |||
The AsyncAppender lets users log events asynchronously. It uses a | its bounded buffer. | |||
bounded buffer to store logging events. | ||||
<p>The AsyncAppender will collect the events sent to it and then | <p><b>Important note:</b> The <code>AsyncAppender</code> can only | |||
dispatch them to all the appenders that are attached to it. You can | be script configured using the {@link xml::DOMConfigurator DOMConfi | |||
attach multiple appenders to an AsyncAppender. | gurator}. | |||
*/ | ||||
class LOG4CXX_EXPORT AsyncAppender : | ||||
public virtual spi::AppenderAttachable, | ||||
public virtual AppenderSkeleton | ||||
{ | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(AsyncAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(AsyncAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | ||||
END_LOG4CXX_CAST_MAP() | ||||
<p>The AsyncAppender uses a separate thread to serve the events in | /** | |||
its bounded buffer. | * Create new instance. | |||
*/ | ||||
AsyncAppender(); | ||||
<p><b>Important note:</b> The <code>AsyncAppender</code> can only | /** | |||
be script configured using the {@link xml::DOMConfigurator DOMConfig | * Destructor. | |||
urator}. | */ | |||
*/ | virtual ~AsyncAppender(); | |||
class LOG4CXX_EXPORT AsyncAppender : | ||||
public virtual spi::AppenderAttachable, | ||||
public virtual AppenderSkeleton | ||||
{ | ||||
friend class Dispatcher; | ||||
public: | void addRef() const; | |||
DECLARE_LOG4CXX_OBJECT(AsyncAppender) | void releaseRef() const; | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(AsyncAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** The default buffer size is set to 128 events. */ | /** | |||
static int DEFAULT_BUFFER_SIZE; | * Add appender. | |||
* | ||||
* @param newAppender appender to add, may not be null. | ||||
*/ | ||||
void addAppender(const AppenderPtr& newAppender); | ||||
helpers::BoundedFIFOPtr bf; | void append(const spi::LoggingEventPtr& event, log4cxx::hel | |||
helpers::AppenderAttachableImplPtr aai; | pers::Pool& p); | |||
DispatcherPtr dispatcher; | ||||
bool locationInfo; | ||||
bool interruptedWarningMessage; | ||||
AsyncAppender(); | /** | |||
virtual ~AsyncAppender(); | Close this <code>AsyncAppender</code> by interrupting the | |||
dispatcher thread which will process all pending events bef | ||||
ore | ||||
exiting. | ||||
*/ | ||||
void close(); | ||||
void addAppender(const AppenderPtr& newAppender); | /** | |||
* Get iterator over attached appenders. | ||||
* @return list of all attached appenders. | ||||
*/ | ||||
AppenderList getAllAppenders() const; | ||||
void append(const spi::LoggingEventPtr& event); | /** | |||
* Get appender by name. | ||||
* | ||||
* @param name name, may not be null. | ||||
* @return matching appender or null. | ||||
*/ | ||||
AppenderPtr getAppender(const LogString& name) const; | ||||
/** | /** | |||
Close this <code>AsyncAppender</code> by interrupting the | * Gets whether the location of the logging request call | |||
dispatcher thread which will process all pending events befo | * should be captured. | |||
re | * | |||
exiting. | * @return the current value of the <b>LocationInfo</b> opt | |||
*/ | ion. | |||
void close(); | */ | |||
bool getLocationInfo() const; | ||||
/** | ||||
* Determines if specified appender is attached. | ||||
* @param appender appender. | ||||
* @return true if attached. | ||||
*/ | ||||
bool isAttached(const AppenderPtr& appender) const; | ||||
AppenderList getAllAppenders() const; | virtual bool requiresLayout() const; | |||
AppenderPtr getAppender(const String& name) const; | ||||
/** | /** | |||
Returns the current value of the <b>LocationInfo</b> option. | * Removes and closes all attached appenders. | |||
*/ | */ | |||
inline bool getLocationInfo() const | void removeAllAppenders(); | |||
{ return locationInfo; } | ||||
/** | /** | |||
Is the appender passed as parameter attached to this asyncap | * Removes an appender. | |||
pender? | * @param appender appender to remove. | |||
*/ | */ | |||
bool isAttached(const AppenderPtr& appender) const; | void removeAppender(const AppenderPtr& appender); | |||
/** | ||||
* Remove appender by name. | ||||
* @param name name. | ||||
*/ | ||||
void removeAppender(const LogString& name); | ||||
void removeAllAppenders(); | /** | |||
void removeAppender(const AppenderPtr& appender); | * The <b>LocationInfo</b> attribute is provided for compati | |||
void removeAppender(const String& name); | bility | |||
* with log4j and has no effect on the log output. | ||||
* @param flag new value. | ||||
*/ | ||||
void setLocationInfo(bool flag); | ||||
/** | /** | |||
The <code>AsyncAppender</code> does not require a layout. He | * The <b>BufferSize</b> option takes a non-negative integer | |||
nce, | value. | |||
this method always returns <code>false</code>. | * This integer value determines the maximum size of the bou | |||
*/ | nded | |||
virtual bool requiresLayout() const | * buffer. | |||
{ return false; } | * */ | |||
void setBufferSize(int size); | ||||
/** | /** | |||
* The <b>LocationInfo</b> option takes a boolean value. By d | * Gets the current buffer size. | |||
efault, | * @return the current value of the <b>BufferSize</b> optio | |||
* it is set to false which means there will be no effort to | n. | |||
extract | */ | |||
* the location information related to the event. As a result | int getBufferSize() const; | |||
, the | ||||
* event that will be ultimately logged will likely to contai | ||||
n the | ||||
* wrong location information (if present in the log format). | ||||
* | ||||
* <p>Location information extraction is comparatively very s | ||||
low and | ||||
* should be avoided unless performance is not a concern. | ||||
* */ | ||||
inline void setLocationInfo(bool flag) | ||||
{ locationInfo = flag; } | ||||
/** | /** | |||
* The <b>BufferSize</b> option takes a non-negative integer | * Sets whether appender should wait if there is no | |||
value. | * space available in the event buffer or immediately retur | |||
* This integer value determines the maximum size of the boun | n. | |||
ded | * | |||
* buffer. Increasing the size of the buffer is always | * @param value true if appender should wait until availabl | |||
* safe. However, if an existing buffer holds unwritten eleme | e space in buffer. | |||
nts, | */ | |||
* then <em>decreasing the buffer size will result in event | void setBlocking(bool value); | |||
* loss.</em> Nevertheless, while script configuring the | ||||
* AsyncAppender, it is safe to set a buffer size smaller tha | ||||
n the | ||||
* {@link #DEFAULT_BUFFER_SIZE default buffer size} because | ||||
* configurators guarantee that an appender cannot be used be | ||||
fore | ||||
* being completely configured. | ||||
* */ | ||||
void setBufferSize(int size); | ||||
/** | /** | |||
Returns the current value of the <b>BufferSize</b> option. | * Gets whether appender should block calling thread when b | |||
*/ | uffer is full. | |||
int getBufferSize() const; | * If false, messages will be counted by logger and a summa | |||
}; // class AsyncAppender | ry | |||
* message appended after the contents of the buffer have b | ||||
een appended. | ||||
* | ||||
* @return true if calling thread will be blocked when buff | ||||
er is full. | ||||
*/ | ||||
bool getBlocking() const; | ||||
class LOG4CXX_EXPORT Dispatcher : public helpers::Thread | /** | |||
{ | * Set appender properties by name. | |||
helpers::BoundedFIFOPtr bf; | * @param option property name. | |||
helpers::AppenderAttachableImplPtr aai; | * @param value property value. | |||
bool interrupted; | */ | |||
AsyncAppender * container; | void setOption(const LogString& option, const LogString& v | |||
alue); | ||||
public: | private: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Dispatcher) | AsyncAppender(const AsyncAppender&); | |||
BEGIN_LOG4CXX_CAST_MAP() | AsyncAppender& operator=(const AsyncAppender&); | |||
LOG4CXX_CAST_ENTRY(Dispatcher) | /** | |||
LOG4CXX_CAST_ENTRY_CHAIN(Thread) | * The default buffer size is set to 128 events. | |||
END_LOG4CXX_CAST_MAP() | */ | |||
enum { DEFAULT_BUFFER_SIZE = 128 }; | ||||
Dispatcher(helpers::BoundedFIFOPtr bf, AsyncAppender * conta | /** | |||
iner); | * Event buffer. | |||
void close(); | */ | |||
LOG4CXX_LIST_DEF(LoggingEventList, log4cxx::spi::LoggingEve | ||||
ntPtr); | ||||
LoggingEventList buffer; | ||||
/** | /** | |||
The dispatching strategy is to wait until there are events i | * Mutex used to guard access to buffer and discardMap. | |||
n the | */ | |||
buffer to process. After having processed an event, we relea | ::log4cxx::helpers::Mutex bufferMutex; | |||
se | ::log4cxx::helpers::Condition bufferNotFull; | |||
the monitor (variable bf) so that new events can be placed i | ::log4cxx::helpers::Condition bufferNotEmpty; | |||
n the | ||||
buffer, instead of keeping the monitor and processing the re | class DiscardSummary { | |||
maining | private: | |||
events in the buffer. | /** | |||
<p>Other approaches might yield better results. | * First event of the highest severity. | |||
*/ | */ | |||
void run(); | ::log4cxx::spi::LoggingEventPtr maxEvent; | |||
}; // class Dispatcher | ||||
/** | ||||
* Total count of messages discarded. | ||||
*/ | ||||
int count; | ||||
public: | ||||
/** | ||||
* Create new instance. | ||||
* | ||||
* @param event event, may not be null. | ||||
*/ | ||||
DiscardSummary(const ::log4cxx::spi::LoggingEventPtr& e | ||||
vent); | ||||
/** Copy constructor. */ | ||||
DiscardSummary(const DiscardSummary& src); | ||||
/** Assignment operator. */ | ||||
DiscardSummary& operator=(const DiscardSummary& src); | ||||
/** | ||||
* Add discarded event to summary. | ||||
* | ||||
* @param event event, may not be null. | ||||
*/ | ||||
void add(const ::log4cxx::spi::LoggingEventPtr& event); | ||||
/** | ||||
* Create event with summary information. | ||||
* | ||||
* @return new event. | ||||
*/ | ||||
::log4cxx::spi::LoggingEventPtr createEvent(::log4cxx: | ||||
:helpers::Pool& p); | ||||
}; | ||||
/** | ||||
* Map of DiscardSummary objects keyed by logger name. | ||||
*/ | ||||
typedef std::map<LogString, DiscardSummary> DiscardMap; | ||||
DiscardMap* discardMap; | ||||
/** | ||||
* Buffer size. | ||||
*/ | ||||
int bufferSize; | ||||
/** | ||||
* Nested appenders. | ||||
*/ | ||||
helpers::AppenderAttachableImplPtr appenders; | ||||
/** | ||||
* Dispatcher. | ||||
*/ | ||||
helpers::Thread dispatcher; | ||||
/** | ||||
* Should location info be included in dispatched messages. | ||||
*/ | ||||
bool locationInfo; | ||||
/** | ||||
* Does appender block when buffer is full. | ||||
*/ | ||||
bool blocking; | ||||
/** | ||||
* Dispatch routine. | ||||
*/ | ||||
static void* LOG4CXX_THREAD_FUNC dispatch(apr_thread_t* thr | ||||
ead, void* data); | ||||
}; // class AsyncAppender | ||||
LOG4CXX_PTR_DEF(AsyncAppender); | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif// _LOG4CXX_ASYNC_APPENDER_H | #endif// _LOG4CXX_ASYNC_APPENDER_H | |||
End of changes. 31 change blocks. | ||||
147 lines changed or deleted | 257 lines changed or added | |||
basicconfigurator.h | basicconfigurator.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_BASIC_CONFIGURATOR_H | #ifndef _LOG4CXX_BASIC_CONFIGURATOR_H | |||
#define _LOG4CXX_BASIC_CONFIGURATOR_H | #define _LOG4CXX_BASIC_CONFIGURATOR_H | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/config.h> | #include <log4cxx/logger.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/spi/configurator.h> | #include <log4cxx/spi/configurator.h> | |||
#include <map> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Appender; | class Appender; | |||
typedef helpers::ObjectPtrT<Appender> AppenderPtr; | typedef helpers::ObjectPtrT<Appender> AppenderPtr; | |||
/** | /** | |||
Use this class to quickly configure the package. | Use this class to quickly configure the package. | |||
<p>For file based configuration see | <p>For file based configuration see | |||
PropertyConfigurator. For XML based configuration see | PropertyConfigurator. For XML based configuration see | |||
DOMConfigurator. | DOMConfigurator. | |||
*/ | */ | |||
class LOG4CXX_EXPORT BasicConfigurator | class LOG4CXX_EXPORT BasicConfigurator | |||
{ | { | |||
protected: | protected: | |||
BasicConfigurator() {} | BasicConfigurator() {} | |||
public: | public: | |||
/** | /** | |||
Add a ConsoleAppender that uses PatternLayout | Add a ConsoleAppender that uses PatternLayout | |||
using the PatternLayout#TTCC_CONVERSION_PATTERN and | using the PatternLayout#TTCC_CONVERSION_PATTERN and | |||
prints to <code>stdout</code> to the root logger.*/ | prints to <code>stdout</code> to the root logger.*/ | |||
static void configure(); | static void configure(); | |||
/** | /** | |||
Add <code>appender</code> to the root logger. | Add <code>appender</code> to the root logger. | |||
@param appender The appender to add to the root logger. | @param appender The appender to add to the root logger. | |||
*/ | */ | |||
static void configure(const AppenderPtr& appender); | static void configure(const AppenderPtr& appender); | |||
/** | /** | |||
Reset the default hierarchy to its defaut. It is equivalent | Reset the default hierarchy to its defaut. It is equivalent to | |||
to | calling | |||
calling | <code>Logger::getDefaultHierarchy()->resetConfiguration()</code>. | |||
<code>Logger::getDefaultHierarchy()->resetConfiguration()</c | See Hierarchy#resetConfiguration() for more details. */ | |||
ode>. | static void resetConfiguration(); | |||
See Hierarchy#resetConfiguration() for more details. */ | }; // class BasicConfigurator | |||
static void resetConfiguration(); | ||||
}; // class BasicConfigurator | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_BASIC_CONFIGURATOR_H | #endif //_LOG4CXX_BASIC_CONFIGURATOR_H | |||
End of changes. 8 change blocks. | ||||
40 lines changed or deleted | 38 lines changed or added | |||
class.h | class.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_CLASS_H | #ifndef _LOG4CXX_HELPERS_CLASS_H | |||
#define _LOG4CXX_HELPERS_CLASS_H | #define _LOG4CXX_HELPERS_CLASS_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning (push) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <map> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class Object; | class Object; | |||
typedef ObjectPtrT<Object> ObjectPtr; | typedef ObjectPtrT<Object> ObjectPtr; | |||
/** | class LOG4CXX_EXPORT Class | |||
Thrown when an application tries to create an instance of a | { | |||
class using | public: | |||
the newInstance method in class Class, but the specified cla | virtual ~Class(); | |||
ss object | virtual ObjectPtr newInstance() const; | |||
cannot be instantiated because it is an interface or is an a | LogString toString() const; | |||
bstract class. | virtual LogString getName() const = 0; | |||
*/ | static const Class& forName(const LogString& classN | |||
class LOG4CXX_EXPORT InstantiationException : public Excepti | ame); | |||
on | static bool registerClass(const Class& newClass); | |||
{ | ||||
public: | ||||
InstantiationException() : Exception(_T("Abstract cl | ||||
ass")) {} | ||||
}; | ||||
/** | protected: | |||
Thrown when an application tries to load in a class through | Class(); | |||
its | ||||
string name but no definition for the class with the specifi | ||||
ed name | ||||
could be found. | ||||
*/ | ||||
class LOG4CXX_EXPORT ClassNotFoundException : public Excepti | ||||
on | ||||
{ | ||||
public: | ||||
ClassNotFoundException(const String& className); | ||||
}; | ||||
class LOG4CXX_EXPORT Class | private: | |||
{ | Class(const Class&); | |||
public: | Class& operator=(const Class&); | |||
Class(const String& name); | typedef std::map<LogString, const Class *> ClassMap | |||
virtual ObjectPtr newInstance() const; | ; | |||
const String& toString() const; | static ClassMap& getRegistry(); | |||
const String& getName() const; | static void registerClasses(); | |||
static const Class& forName(const String& className) | }; | |||
; | } // namespace log4cxx | |||
} // namespace helper | ||||
protected: | #if defined(_MSC_VER) | |||
static void registerClass(const Class * newClass); | #pragma warning (pop) | |||
String name; | #endif | |||
}; | ||||
} // namespace log4cxx | ||||
}; // namespace helper | ||||
#endif //_LOG4CXX_HELPERS_CLASS_H | #endif //_LOG4CXX_HELPERS_CLASS_H | |||
End of changes. 8 change blocks. | ||||
53 lines changed or deleted | 42 lines changed or added | |||
condition.h | condition.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_CONDITION_H | #ifndef _LOG4CXX_HELPERS_CONDITION_H | |||
#define _LOG4CXX_HELPERS_CONDITION_H | #define _LOG4CXX_HELPERS_CONDITION_H | |||
#include <log4cxx/config.h> | #include <log4cxx/log4cxx.h> | |||
#include <log4cxx/helpers/exception.h> | ||||
#include <log4cxx/helpers/mutex.h> | #include <log4cxx/helpers/mutex.h> | |||
#include <log4cxx/helpers/semaphore.h> | ||||
#ifdef HAVE_PTHREAD | extern "C" { | |||
#include <pthread.h> | struct apr_thread_cond_t; | |||
#endif | } | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT ConditionException : public Exception | class Pool; | |||
{ | ||||
}; | ||||
class LOG4CXX_EXPORT Condition | ||||
{ | ||||
public: | ||||
Condition(); | ||||
~Condition(); | ||||
void broadcast(); | ||||
void signal(); | ||||
void wait(Mutex& mutex); | ||||
void wait(Mutex& mutex, long timeOut); | ||||
protected: | ||||
#ifdef HAVE_PTHREAD | ||||
pthread_cond_t condition; | ||||
#elif defined(HAVE_MS_THREAD) | ||||
/// Number of waiting threads. | ||||
long volatile waiters; | ||||
/// Queue up threads waiting for the condition to be | ||||
come signaled. | ||||
Semaphore sema; | ||||
/** | /** | |||
* An auto reset event used by the broadcast/signal t | * This class provides a means for one thread to suspend | |||
hread to wait | exception until | |||
* for the waiting thread(s) to wake up and get a cha | * notified by another thread to resume. This class shou | |||
nce at the | ld have | |||
* semaphore. | * similar semantics to java.util.concurrent.locks.Condit | |||
*/ | ion. | |||
void * waitersDone; | */ | |||
class LOG4CXX_EXPORT Condition | ||||
{ | ||||
public: | ||||
/** | ||||
* Create new instance. | ||||
* @param p pool on which condition will be create | ||||
d. Needs to be | ||||
* longer-lived than created instance. | ||||
*/ | ||||
Condition(log4cxx::helpers::Pool& p); | ||||
/** | ||||
* Destructor. | ||||
*/ | ||||
~Condition(); | ||||
/** | ||||
* Signal all waiting threads. | ||||
*/ | ||||
log4cxx_status_t signalAll(); | ||||
/** | ||||
* Await signaling of condition. | ||||
* @param lock lock associated with condition, cal | ||||
ling thread must | ||||
* own lock. Lock will be released while waiting | ||||
and reacquired | ||||
* before returning from wait. | ||||
* @throws InterruptedException if thread is inter | ||||
rupted. | ||||
*/ | ||||
void await(Mutex& lock); | ||||
/// Keeps track of whether we were broadcasting or j | private: | |||
ust signaling. | apr_thread_cond_t* condition; | |||
bool wasBroadCast; | Condition(const Condition&); | |||
#endif | Condition& operator=(const Condition&); | |||
}; | }; | |||
} // namespace helpers | } // namespace helpers | |||
};// namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_HELPERS_CONDITION_H | #endif //_LOG4CXX_HELPERS_CONDITION_H | |||
End of changes. 7 change blocks. | ||||
52 lines changed or deleted | 57 lines changed or added | |||
configurator.h | configurator.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_CONFIGURATOR_H | #ifndef _LOG4CXX_SPI_CONFIGURATOR_H | |||
#define _LOG4CXX_SPI_CONFIGURATOR_H | #define _LOG4CXX_SPI_CONFIGURATOR_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/spi/loggerrepository.h> | |||
#include <log4cxx/helpers/object.h> | ||||
#include <log4cxx/helpers/objectptr.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | class File; | |||
{ | ||||
class LoggerRepository; | ||||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | ||||
ryPtr; | ||||
class Configurator; | namespace spi | |||
typedef helpers::ObjectPtrT<Configurator> ConfiguratorPtr; | { | |||
/** | ||||
Implemented by classes capable of configuring log4j using a URL. | ||||
*/ | ||||
class LOG4CXX_EXPORT Configurator : virtual public helpers::Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Configurator) | ||||
Configurator(); | ||||
/** | /** | |||
Implemented by classes capable of configuring log4j using a | Interpret a resource pointed by a URL and set up log4j accordingly | |||
URL. | . | |||
*/ | ||||
class LOG4CXX_EXPORT Configurator : virtual public helpers:: | ||||
Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Configurator) | ||||
/** | ||||
Special level value signifying inherited behaviour. | ||||
The current | ||||
value of this string constant is <b>inherited</b>. # | ||||
NuLL | ||||
is a synonym. */ | ||||
static String INHERITED /*= "inherited"*/; | ||||
/** | The configuration is done relative to the <code>hierarchy</code> | |||
Special level signifying inherited behaviour, same a | parameter. | |||
s | ||||
#INHERITED. The current value of this string constan | ||||
t is | ||||
<b>null</b>. */ | ||||
static String NuLL /*= "null"*/; | ||||
/** | @param configFileName The file to parse | |||
Interpret a resource pointed by a URL and set up log | @param repository The hierarchy to operation upon. | |||
4j accordingly. | */ | |||
virtual void doConfigure(const File& configFileName, | ||||
spi::LoggerRepositoryPtr& repository) = 0; | ||||
The configuration is done relative to the <code>hier | private: | |||
archy</code> | Configurator(const Configurator&); | |||
parameter. | Configurator& operator=(const Configurator&); | |||
bool initialized; | ||||
}; | ||||
@param configFileName The file to parse | LOG4CXX_PTR_DEF(Configurator); | |||
@param repository The hierarchy to operation upon. | } | |||
*/ | ||||
virtual void doConfigure(const String& configFileNam | ||||
e, | ||||
spi::LoggerRepositoryPtr& repository) = 0; | ||||
}; | ||||
} | ||||
} | } | |||
#endif // _LOG4CXX_SPI_CONFIGURATOR_H | #endif // _LOG4CXX_SPI_CONFIGURATOR_H | |||
End of changes. 9 change blocks. | ||||
52 lines changed or deleted | 35 lines changed or added | |||
consoleappender.h | consoleappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_CONSOLE_APPENDER_H | #ifndef _LOG4CXX_CONSOLE_APPENDER_H | |||
#define _LOG4CXX_CONSOLE_APPENDER_H | #define _LOG4CXX_CONSOLE_APPENDER_H | |||
#include <log4cxx/writerappender.h> | #include <log4cxx/writerappender.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class ConsoleAppender; | ||||
typedef helpers::ObjectPtrT<ConsoleAppender> ConsoleAppenderPtr; | ||||
/** | ||||
* ConsoleAppender appends log events to <code>stdout</code> or | ||||
* <code>stderr</code> using a layout specified by the user. The | ||||
* default target is <code>stdout</code>. | ||||
*/ | ||||
class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender | ||||
{ | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(ConsoleAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(ConsoleAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
ConsoleAppender(); | /** | |||
ConsoleAppender(const LayoutPtr& layout); | * ConsoleAppender appends log events to <code>stdout</code> or | |||
ConsoleAppender(const LayoutPtr& layout, const String& targe | * <code>stderr</code> using a layout specified by the user. The | |||
t); | * default target is <code>stdout</code>. | |||
~ConsoleAppender(); | */ | |||
class LOG4CXX_EXPORT ConsoleAppender : public WriterAppender | ||||
{ | ||||
private: | ||||
LogString target; | ||||
/** | public: | |||
* This method overrides the parent | DECLARE_LOG4CXX_OBJECT(ConsoleAppender) | |||
* WriterAppender#closeWriter implementation to do nothing because | BEGIN_LOG4CXX_CAST_MAP() | |||
* the console stream is not ours to close. | LOG4CXX_CAST_ENTRY(ConsoleAppender) | |||
* */ | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
protected: | END_LOG4CXX_CAST_MAP() | |||
virtual void closeWriter() {} | ||||
/** | ConsoleAppender(); | |||
* Sets the value of the <b>#target</b> property. Recognized values | ConsoleAppender(const LayoutPtr& layout); | |||
* are "System.out" and "System.err". Any other value will be | ConsoleAppender(const LayoutPtr& layout, const LogString& t | |||
* ignored. | arget); | |||
* */ | ~ConsoleAppender(); | |||
public: | ||||
void setTarget(const String& value); | ||||
/** | /** | |||
* Returns the current value of the <b>#target</b> property. The | * Sets the value of the <b>target</b> property. Recognized | |||
* default value of the option is "System.out". | values | |||
* | * are "System.out" and "System.err". Any other value will | |||
* See also #setTarget. | be | |||
* */ | * ignored. | |||
public: | * */ | |||
const String& getTarget() const; | void setTarget(const LogString& value); | |||
protected: | /** | |||
void targetWarn(const String& val); | * Returns the current value of the <b>target</b> property. | |||
The | ||||
* default value of the option is "System.out". | ||||
* | ||||
* See also #setTarget. | ||||
* */ | ||||
LogString getTarget() const; | ||||
public: | void activateOptions(log4cxx::helpers::Pool& p); | |||
void activateOptions(); | void setOption(const LogString& option, const LogString& va | |||
void setOption(const String& option, const String& value); | lue); | |||
static const LogString& getSystemOut(); | ||||
static const LogString& getSystemErr(); | ||||
public: | private: | |||
static String SYSTEM_OUT; | void targetWarn(const LogString& val); | |||
static String SYSTEM_ERR; | static log4cxx::helpers::WriterPtr createWriter(const LogSt | |||
ring& target); | ||||
protected: | }; | |||
String target; | LOG4CXX_PTR_DEF(ConsoleAppender); | |||
}; | ||||
} //namespace log4cxx | } //namespace log4cxx | |||
#endif //_LOG4CXX_CONSOLE_APPENDER_H | #endif //_LOG4CXX_CONSOLE_APPENDER_H | |||
End of changes. 10 change blocks. | ||||
59 lines changed or deleted | 53 lines changed or added | |||
cyclicbuffer.h | cyclicbuffer.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_CYCLICBUFFER_H | #ifndef _LOG4CXX_HELPERS_CYCLICBUFFER_H | |||
#define _LOG4CXX_HELPERS_CYCLICBUFFER_H | #define _LOG4CXX_HELPERS_CYCLICBUFFER_H | |||
#include <log4cxx/spi/loggingevent.h> | #include <log4cxx/spi/loggingevent.h> | |||
#include <vector> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
CyclicBuffer is used by other appenders to hold {@link spi:: | CyclicBuffer is used by other appenders to hold instances o | |||
LoggingEvent | f | |||
LoggingEvents} for immediate or differed display. | {@link log4cxx::spi::LoggingEvent LoggingEvent} for immedia | |||
<p>This buffer gives read access to any element in the buffe | te | |||
r not | or deferred display. | |||
just the first or last element. | <p>This buffer gives read access to any element in the buff | |||
*/ | er not | |||
class LOG4CXX_EXPORT CyclicBuffer | just the first or last element. | |||
{ | */ | |||
std::vector<spi::LoggingEventPtr> ea; | class LOG4CXX_EXPORT CyclicBuffer | |||
int first; | { | |||
int last; | log4cxx::spi::LoggingEventList ea; | |||
int numElems; | int first; | |||
int maxSize; | int last; | |||
int numElems; | ||||
int maxSize; | ||||
public: | public: | |||
/** | /** | |||
Instantiate a new CyclicBuffer of at most <code>maxS | Instantiate a new CyclicBuffer of at most <code>max | |||
ize</code> | Size</code> | |||
events. | events. | |||
The <code>maxSize</code> argument must a positive in | The <code>maxSize</code> argument must a positive i | |||
teger. | nteger. | |||
@param maxSize The maximum number of elements in the | @param maxSize The maximum number of elements in th | |||
buffer. | e buffer. | |||
@throws IllegalArgumentException if <code>maxSize</c | @throws IllegalArgumentException if <code>maxSize</ | |||
ode> | code> | |||
is negative. | is negative. | |||
*/ | */ | |||
CyclicBuffer(int maxSize); | CyclicBuffer(int maxSize); | |||
~CyclicBuffer(); | ~CyclicBuffer(); | |||
/** | /** | |||
Add an <code>event</code> as the last event in the b | Add an <code>event</code> as the last event in the | |||
uffer. | buffer. | |||
*/ | */ | |||
void add(const spi::LoggingEventPtr& event); | void add(const spi::LoggingEventPtr& event); | |||
/** | /** | |||
Get the <i>i</i>th oldest event currently in the buf | Get the <i>i</i>th oldest event currently in the bu | |||
fer. If | ffer. If | |||
<em>i</em> is outside the range 0 to the number of e | <em>i</em> is outside the range 0 to the number of | |||
lements | elements | |||
currently in the buffer, then <code>null</code> is r | currently in the buffer, then <code>null</code> is | |||
eturned. | returned. | |||
*/ | */ | |||
spi::LoggingEventPtr get(int i); | spi::LoggingEventPtr get(int i); | |||
int getMaxSize() const | int getMaxSize() const | |||
{ return maxSize; } | { return maxSize; } | |||
/** | /** | |||
Get the oldest (first) element in the buffer. The ol | Get the oldest (first) element in the buffer. The o | |||
dest element | ldest element | |||
is removed from the buffer. | is removed from the buffer. | |||
*/ | */ | |||
spi::LoggingEventPtr get(); | spi::LoggingEventPtr get(); | |||
/** | /** | |||
Get the number of elements in the buffer. This numbe | Get the number of elements in the buffer. This numb | |||
r is | er is | |||
guaranteed to be in the range 0 to <code>maxSize</co | guaranteed to be in the range 0 to <code>maxSize</c | |||
de> | ode> | |||
(inclusive). | (inclusive). | |||
*/ | */ | |||
int length() const | int length() const | |||
{ return numElems; } | { return numElems; } | |||
/** | /** | |||
Resize the cyclic buffer to <code>newSize</code>. | Resize the cyclic buffer to <code>newSize</code>. | |||
@throws IllegalArgumentException if <code>newSize</c | @throws IllegalArgumentException if <code>newSize</ | |||
ode> is negative. | code> is negative. | |||
*/ | */ | |||
void resize(int newSize); | void resize(int newSize); | |||
}; // class CyclicBuffer | }; // class CyclicBuffer | |||
} //namespace helpers | } //namespace helpers | |||
}; //namespace log4cxx | } //namespace log4cxx | |||
#endif //_LOG4CXX_HELPERS_CYCLICBUFFER_H | #endif //_LOG4CXX_HELPERS_CYCLICBUFFER_H | |||
End of changes. 10 change blocks. | ||||
78 lines changed or deleted | 80 lines changed or added | |||
dailyrollingfileappender.h | dailyrollingfileappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_DAILY_ROLLING_FILE_APPENDER_H | #ifndef _LOG4CXX_DAILYROLLINGFILEAPPENDER_H | |||
#define _LOG4CXX_DAILY_ROLLING_FILE_APPENDER_H | #define _LOG4CXX_DAILYROLLINGFILEAPPENDER_H | |||
#include <log4cxx/fileappender.h> | ||||
#include <log4cxx/helpers/timezone.h> | ||||
namespace log4cxx | ||||
{ | ||||
namespace helpers | ||||
{ | ||||
class DateFormat; | ||||
} | ||||
/** | ||||
* RollingCalendar is a helper class to DailyRollingFileAppender. | ||||
* Given a periodicity type and the current time, it computes the | ||||
* start of the next interval. | ||||
* */ | ||||
class LOG4CXX_EXPORT RollingCalendar | ||||
{ | ||||
public: | ||||
// The code assumes that the following constants are in a in | ||||
creasing | ||||
// sequence. | ||||
typedef enum PeriodicityType | ||||
{ | ||||
TOP_OF_TROUBLE =-1, | ||||
TOP_OF_MINUTE = 0, | ||||
TOP_OF_HOUR = 1, | ||||
HALF_DAY = 2, | ||||
TOP_OF_DAY = 3, | ||||
TOP_OF_WEEK = 4, | ||||
TOP_OF_MONTH = 5, | ||||
}; | ||||
RollingCalendar(); | ||||
RollingCalendar(const helpers::TimeZonePtr& timeZone); | ||||
inline void setType(PeriodicityType type) | ||||
{ this->type = type; } | ||||
/** | ||||
This method computes the roll over period by looping over th | ||||
e | ||||
periods, starting with the shortest, and stopping when the r | ||||
0 is | ||||
different from from r1, where r0 is the epoch formatted acco | ||||
rding | ||||
the datePattern (supplied by the user) and r1 is the | ||||
epoch+nextMillis(i) formatted according to datePattern. All | ||||
date | ||||
formatting is done in GMT and not local format because the t | ||||
est | ||||
logic is based on comparisons relative to 1970-01-01 00:00:0 | ||||
0 | ||||
GMT (the epoch). | ||||
*/ | ||||
PeriodicityType computeTriggeringPeriod(const String& datePa | ||||
ttern); | ||||
void printPeriodicity(); | ||||
int64_t getNextCheckMillis(int64_t now); | ||||
/** | #if defined(_MSC_VER) | |||
Gets the time zone. | #pragma warning ( push ) | |||
@return the time zone object associated with this calendar. | #pragma warning ( disable: 4231 4251 4275 4786 ) | |||
*/ | #endif | |||
inline const helpers::TimeZonePtr getTimeZone() const | ||||
{ return timeZone; } | ||||
/** | #include <log4cxx/appender.h> | |||
Sets the time zone with the given time zone value. | #include <log4cxx/fileappender.h> | |||
@return value the given time zone. | #include <log4cxx/spi/optionhandler.h> | |||
*/ | #include <log4cxx/rolling/rollingfileappenderskeleton.h> | |||
inline void setTimeZone(const helpers::TimeZonePtr& timeZone | ||||
) | ||||
{ this->timeZone = timeZone; } | ||||
protected: | namespace log4cxx { | |||
PeriodicityType type; | namespace helpers { | |||
helpers::TimeZonePtr timeZone; | class Pool; | |||
static helpers::TimeZonePtr GMT_TIMEZONE; | } | |||
}; | ||||
class DailyRollingFileAppender; | namespace spi { | |||
typedef helpers::ObjectPtrT<DailyRollingFileAppender> DailyRollingFi | class ErrorHandler; | |||
leAppenderPtr; | typedef log4cxx::helpers::ObjectPtrT<ErrorHandler> ErrorHandlerPtr; | |||
} | ||||
/** | /** | |||
DailyRollingFileAppender extends {@link FileAppender} so that the | DailyRollingFileAppender extends {@link log4cxx::FileAppender FileAppend | |||
underlying file is rolled over at a user chosen frequency. | er} so that the | |||
underlying file is rolled over at a user chosen frequency. | ||||
<p>The rolling schedule is specified by the <b>DatePattern</b> | <p>The rolling schedule is specified by the <b>DatePattern</b> | |||
option. This pattern should follow the helpers::DateFormat | option. This pattern should follow the | |||
conventions. In particular, you <em>must</em> escape literal text | {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat} | |||
within a pair of single quotes. A formatted version of the date | conventions. In particular, you <em>must</em> escape literal text | |||
pattern is used as the suffix for the rolled file name. | within a pair of single quotes. A formatted version of the date | |||
pattern is used as the suffix for the rolled file name. | ||||
<p>For example, if the <b>File</b> option is set to | <p>For example, if the <b>File</b> option is set to | |||
<code>/foo/bar.log</code> and the <b>DatePattern</b> set to | <code>/foo/bar.log</code> and the <b>DatePattern</b> set to | |||
<code>'.'yyyy-MM-dd</code>, on 2001-02-16 at midnight, the logging | <code>'.'yyyy-MM-dd</code>, on 2001-02-16 at midnight, the logging | |||
file <code>/foo/bar.log</code> will be copied to | file <code>/foo/bar.log</code> will be copied to | |||
<code>/foo/bar.log.2001-02-16</code> and logging for 2001-02-17 | <code>/foo/bar.log.2001-02-16</code> and logging for 2001-02-17 | |||
will continue in <code>/foo/bar.log</code> until it rolls over | will continue in <code>/foo/bar.log</code> until it rolls over | |||
the next day. | the next day. | |||
<p>Is is possible to specify monthly, weekly, half-daily, daily, | <p>Is is possible to specify monthly, weekly, half-daily, daily, | |||
hourly, or minutely rollover schedules. | hourly, or minutely rollover schedules. | |||
<p><table border="1" cellpadding="2"> | <p><table border="1" cellpadding="2"> | |||
<tr> | <tr> | |||
<th>DatePattern</th> | <th>DatePattern</th> | |||
<th>Rollover schedule</th> | <th>Rollover schedule</th> | |||
<th>Example</th> | <th>Example</th> | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-MM</code> | <td><code>'.'yyyy-MM</code> | |||
<td>Rollover at the beginning of each month</td> | <td>Rollover at the beginning of each month</td> | |||
<td>At midnight of May 31st, 2002 <code>/foo/bar.log</code> will be | <td>At midnight of May 31st, 2002 <code>/foo/bar.log</code> will be | |||
copied to <code>/foo/bar.log.2002-05</code>. Logging for the month | copied to <code>/foo/bar.log.2002-05</code>. Logging for the month | |||
of June will be output to <code>/foo/bar.log</code> until it is | of June will be output to <code>/foo/bar.log</code> until it is | |||
also rolled over the next month. | also rolled over the next month. | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-ww</code> | <td><code>'.'yyyy-ww</code> | |||
<td>Rollover at the first day of each week. The first day of the | <td>Rollover at the first day of each week. The first day of the | |||
week depends on the locale.</td> | week depends on the locale.</td> | |||
<td>Assuming the first day of the week is Sunday, on Saturday | <td>Assuming the first day of the week is Sunday, on Saturday | |||
midnight, June 9th 2002, the file <i>/foo/bar.log</i> will be | midnight, June 9th 2002, the file <i>/foo/bar.log</i> will be | |||
copied to <i>/foo/bar.log.2002-23</i>. Logging for the 24th week | copied to <i>/foo/bar.log.2002-23</i>. Logging for the 24th week | |||
of 2002 will be output to <code>/foo/bar.log</code> until it is | of 2002 will be output to <code>/foo/bar.log</code> until it is | |||
rolled over the next week. | rolled over the next week. | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-MM-dd</code> | <td><code>'.'yyyy-MM-dd</code> | |||
<td>Rollover at midnight each day.</td> | <td>Rollover at midnight each day.</td> | |||
<td>At 00:00 AM March 8th, 2002, <code>/foo/bar.log</code> will be | <td>At midnight, on March 8th, 2002, <code>/foo/bar.log</code> will | |||
copied to <code>/foo/bar.log.2002-03-07</code>. Logging for the 8th | be copied to <code>/foo/bar.log.2002-03-08</code>. Logging for the | |||
day of March will be output to <code>/foo/bar.log</code> until it | 9th day of March will be output to <code>/foo/bar.log</code> until | |||
is rolled over the next day. | it is rolled over the next day. | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-MM-dd-a</code> | <td><code>'.'yyyy-MM-dd-a</code> | |||
<td>Rollover at midnight and midday of each day.</td> | <td>Rollover at midnight and midday of each day.</td> | |||
<td>At noon, on March 9th, 2002, <code>/foo/bar.log</code> will be | <td>At noon, on March 9th, 2002, <code>/foo/bar.log</code> will be | |||
copied to <code>/foo/bar.log.2002-03-09-AM</code>. Logging for the | copied to <code>/foo/bar.log.2002-03-09-AM</code>. Logging for the | |||
afternoon of the 9th will be output to <code>/foo/bar.log</code> | afternoon of the 9th will be output to <code>/foo/bar.log</code> | |||
until it is rolled over at midnight. | until it is rolled over at midnight. | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-MM-dd-HH</code> | <td><code>'.'yyyy-MM-dd-HH</code> | |||
<td>Rollover at the top of every hour.</td> | <td>Rollover at the top of every hour.</td> | |||
<td>At approximately 11:00.000 o'clock on March 9th, 2002, | <td>At approximately 11:00.000 o'clock on March 9th, 2002, | |||
<code>/foo/bar.log</code> will be copied to | <code>/foo/bar.log</code> will be copied to | |||
<code>/foo/bar.log.2002-03-09-10</code>. Logging for the 11th hour | <code>/foo/bar.log.2002-03-09-10</code>. Logging for the 11th hour | |||
of the 9th of March will be output to <code>/foo/bar.log</code> | of the 9th of March will be output to <code>/foo/bar.log</code> | |||
until it is rolled over at the beginning of the next hour. | until it is rolled over at the beginning of the next hour. | |||
<tr> | <tr> | |||
<td><code>'.'yyyy-MM-dd-HH-mm</code> | <td><code>'.'yyyy-MM-dd-HH-mm</code> | |||
<td>Rollover at the beginning of every minute.</td> | <td>Rollover at the beginning of every minute.</td> | |||
<td>At approximately 11:23,000, on March 9th, 2001, | <td>At approximately 11:23,000, on March 9th, 2001, | |||
<code>/foo/bar.log</code> will be copied to | <code>/foo/bar.log</code> will be copied to | |||
<code>/foo/bar.log.2001-03-09-11-22</code>. Logging for the minute | <code>/foo/bar.log.2001-03-09-10-22</code>. Logging for the minute | |||
of 11:23 (9th of March) will be output to | of 11:23 (9th of March) will be output to | |||
<code>/foo/bar.log</code> until it is rolled over the next minute. | <code>/foo/bar.log</code> until it is rolled over the next minute. | |||
</table> | </table> | |||
<p>Do not use the colon ":" character in anywhere in the | <p>Do not use the colon ":" character in anywhere in the | |||
<b>DatePattern</b> option. The text before the colon is interpeted | <b>DatePattern</b> option. The text before the colon is interpeted | |||
as the protocol specificaion of a URL which is probably not what | as the protocol specificaion of a URL which is probably not what | |||
you want. | you want. | |||
**/ | */ | |||
class LOG4CXX_EXPORT DailyRollingFileAppender : public FileAppender | ||||
{ | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(DailyRollingFileAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DailyRollingFileAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(FileAppender) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | class LOG4CXX_EXPORT DailyRollingFileAppender : public log4cxx::rolling:: | |||
The default constructor does nothing. */ | RollingFileAppenderSkeleton { | |||
DailyRollingFileAppender(); | DECLARE_LOG4CXX_OBJECT(DailyRollingFileAppender) | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DailyRollingFileAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(FileAppender) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | /** | |||
Instantiate a <code>DailyRollingFileAppender</code> and open | The date pattern used to initiate rollover. | |||
the | */ | |||
file designated by <code>filename</code>. The opened filenam | LogString datePattern; | |||
e will | ||||
become the ouput destination for this appender. | ||||
*/ | ||||
DailyRollingFileAppender(LayoutPtr& layout, | ||||
const String& filename, const String& datePattern); | ||||
~DailyRollingFileAppender(); | public: | |||
/** | ||||
The default constructor simply calls its {@link | ||||
FileAppender#FileAppender parents constructor}. */ | ||||
DailyRollingFileAppender(); | ||||
/** | /** | |||
The <b>DatePattern</b> takes a string in the same format as | Instantiate a DailyRollingFileAppender and open the file designated by | |||
expected by helpers::DateFormat. This options determines the | <code>filename</code>. The opened filename will become the ouput | |||
rollover schedule. | destination for this appender. | |||
*/ | ||||
inline void setDatePattern(const String& pattern) | ||||
{ datePattern = pattern; } | ||||
/** Returns the value of the <b>DatePattern</b> option. */ | */ | |||
inline const String& getDatePattern() const | DailyRollingFileAppender( | |||
{ return datePattern; } | const LayoutPtr& layout, | |||
const LogString& filename, | ||||
const LogString& datePattern); | ||||
void activateOptions(); | /** | |||
void setOption(const String& option, | The <b>DatePattern</b> takes a string in the same format as | |||
const String& value); | expected by {@link log4cxx::helpers::SimpleDateFormat SimpleDateFormat | |||
}. This options determines the | ||||
rollover schedule. | ||||
*/ | ||||
void setDatePattern(const LogString& pattern); | ||||
protected: | /** Returns the value of the <b>DatePattern</b> option. */ | |||
/** | LogString getDatePattern(); | |||
Rollover the current file to a new file. | ||||
*/ | ||||
void rollOver(); | ||||
/** | void setOption(const LogString& option, | |||
* This method differentiates DailyRollingFileAppender from i | const LogString& value); | |||
ts | ||||
* super class. | ||||
* | ||||
* <p>Before actually logging, this method will check whether | ||||
it is | ||||
* time to do a rollover. If it is, it will schedule the next | ||||
* rollover time and then rollover. | ||||
* */ | ||||
virtual void subAppend(const spi::LoggingEventPtr& event); | ||||
/** | /** | |||
The date pattern. By default, the pattern is set to | * Prepares DailyRollingFileAppender for use. | |||
"'.'yyyy-MM-dd" meaning daily rollover. | */ | |||
*/ | void activateOptions(log4cxx::helpers::Pool&); | |||
String datePattern; | ||||
/** | }; | |||
The log file will be renamed to the value of the | ||||
scheduledFilename variable when the next interval is entered | ||||
. For | ||||
example, if the rollover period is one hour, the log file wi | ||||
ll be | ||||
renamed to the value of "scheduledFilename" at the beginning | ||||
of | ||||
the next hour. | ||||
The precise time when a rollover occurs depends on logging | LOG4CXX_PTR_DEF(DailyRollingFileAppender); | |||
activity. | ||||
*/ | ||||
String scheduledFilename; | ||||
/** | ||||
The next time we estimate a rollover should occur. */ | ||||
int64_t nextCheck; | ||||
int64_t now; | ||||
helpers::DateFormat * df; | ||||
RollingCalendar rc; | ||||
}; | ||||
} | } | |||
#endif //_LOG4CXX_DAILY_ROLLING_FILE_APPENDER_H | #if defined(_MSC_VER) | |||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif | ||||
End of changes. 43 change blocks. | ||||
236 lines changed or deleted | 142 lines changed or added | |||
datagrampacket.h | datagrampacket.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_DATAGRAM_PACKET | #ifndef _LOG4CXX_HELPERS_DATAGRAM_PACKET | |||
#define _LOG4CXX_HELPERS_DATAGRAM_PACKET | #define _LOG4CXX_HELPERS_DATAGRAM_PACKET | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/inetaddress.h> | #include <log4cxx/helpers/inetaddress.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class DatagramPacket; | ||||
typedef helpers::ObjectPtrT<DatagramPacket> DatagramPacketPt | ||||
r; | ||||
/** This class represents a datagram packet. | /** This class represents a datagram packet. | |||
<p>Datagram packets are used to implement a connectionless p | <p>Datagram packets are used to implement a connectionless | |||
acket | packet | |||
delivery service. Each message is routed from one machine to | delivery service. Each message is routed from one machine t | |||
another | o another | |||
based solely on information contained within that packet. Mu | based solely on information contained within that packet. M | |||
ltiple | ultiple | |||
packets sent from one machine to another might be routed dif | packets sent from one machine to another might be routed di | |||
ferently, | fferently, | |||
and might arrive in any order. | and might arrive in any order. | |||
*/ | */ | |||
class LOG4CXX_EXPORT DatagramPacket : public helpers::Object | class LOG4CXX_EXPORT DatagramPacket : public helpers::Objec | |||
Impl | tImpl | |||
{ | { | |||
protected: | protected: | |||
/** the data for this packet. */ | /** the data for this packet. */ | |||
void * buf; | void * buf; | |||
/** The offset of the data for this packet. */ | /** The offset of the data for this packet. */ | |||
int offset; | int offset; | |||
/** The length of the data for this packet. */ | /** The length of the data for this packet. */ | |||
int length; | int length; | |||
/** The IP address for this packet. */ | /** The IP address for this packet. */ | |||
InetAddress address; | InetAddressPtr address; | |||
/** The UDP port number of the remote host. */ | /** The UDP port number of the remote host. */ | |||
int port; | int port; | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(DatagramPacket) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(DatagramPacket) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(DatagramPacket) | LOG4CXX_CAST_ENTRY(DatagramPacket) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** Constructs a DatagramPacket for receiving packet | /** Constructs a DatagramPacket for receiving packe | |||
s of length | ts of length | |||
<code>length</code>. */ | <code>length</code>. */ | |||
DatagramPacket(void * buf, int length); | DatagramPacket(void * buf, int length); | |||
/** Constructs a datagram packet for sending packets | /** Constructs a datagram packet for sending packet | |||
of length | s of length | |||
<code>length</code> to the specified port number on | <code>length</code> to the specified port number on | |||
the specified | the specified | |||
host. */ | host. */ | |||
DatagramPacket(void * buf, int length, InetAddress a | DatagramPacket(void * buf, int length, InetAddressP | |||
ddress, int port); | tr address, int port); | |||
/** Constructs a DatagramPacket for receiving packet | /** Constructs a DatagramPacket for receiving packe | |||
s of length | ts of length | |||
<code>length</code>, specifying an offset into the b | <code>length</code>, specifying an offset into the | |||
uffer. */ | buffer. */ | |||
DatagramPacket(void * buf, int offset, int length); | DatagramPacket(void * buf, int offset, int length); | |||
/** Constructs a datagram packet for sending packets | /** Constructs a datagram packet for sending packet | |||
of length | s of length | |||
<code>length</code> with offset <code>offset</code> | <code>length</code> with offset <code>offset</code> | |||
to the | to the | |||
specified port number on the specified host. */ | specified port number on the specified host. */ | |||
DatagramPacket(void * buf, int offset, int length, I | DatagramPacket(void * buf, int offset, int length, | |||
netAddress address, | InetAddressPtr address, | |||
int port); | int port); | |||
~DatagramPacket(); | ~DatagramPacket(); | |||
/** Returns the IP address of the machine to which t | /** Returns the IP address of the machine to which | |||
his datagram | this datagram | |||
is being sent or from which the datagram was receive | is being sent or from which the datagram was receiv | |||
d. */ | ed. */ | |||
inline InetAddress getAddress() const | inline InetAddressPtr getAddress() const | |||
{ return address; } | { return address; } | |||
/** Returns the data received or the data to be sent | /** Returns the data received or the data to be sen | |||
. */ | t. */ | |||
inline void * getData() const | inline void * getData() const | |||
{ return buf; } | { return buf; } | |||
/** Returns the length of the data to be sent or the | /** Returns the length of the data to be sent or th | |||
length of the | e length of the | |||
data received. */ | data received. */ | |||
inline int getLength() const | inline int getLength() const | |||
{ return length; } | { return length; } | |||
/** Returns the offset of the data to be sent or the | /** Returns the offset of the data to be sent or th | |||
offset of the | e offset of the | |||
data received. */ | data received. */ | |||
inline int getOffset() const | inline int getOffset() const | |||
{ return offset; } | { return offset; } | |||
/** Returns the port number on the remote host to wh | /** Returns the port number on the remote host to w | |||
ich this | hich this | |||
datagram is being sent or from which the datagram w | datagram is being sent or from which the datagram | |||
as received. */ | was received. */ | |||
inline int getPort() const | inline int getPort() const | |||
{ return port; } | { return port; } | |||
inline void setAddress(InetAddress address) | inline void setAddress(InetAddressPtr address1) | |||
{ this->address = address; } | { this->address = address1; } | |||
/** Set the data buffer for this packet. */ | /** Set the data buffer for this packet. */ | |||
inline void setData(void * buf) | inline void setData(void * buf1) | |||
{ this->buf = buf; } | { this->buf = buf1; } | |||
/** Set the data buffer for this packet. */ | /** Set the data buffer for this packet. */ | |||
inline void setData(void * buf, int offset, int leng | inline void setData(void * buf1, int offset1, int l | |||
th) | ength1) | |||
{ this->buf = buf; this->offset = offset; th | { this->buf = buf1; this->offset = offset1; | |||
is->length = length; } | this->length = length1; } | |||
/** Set the length for this packet. */ | /** Set the length for this packet. */ | |||
inline void setLength(int length) | inline void setLength(int length1) | |||
{ this->length = length; } | { this->length = length1; } | |||
inline void setPort(int port) | inline void setPort(int port1) | |||
{ this->port = port; } | { this->port = port1; } | |||
}; // class DatagramSocketImpl | private: | |||
} // namespace helpers | // | |||
}; // namespace log4cxx | // prevent copy and assignment statements | |||
DatagramPacket(const DatagramPacket&); | ||||
DatagramPacket& operator=(const DatagramPacket&); | ||||
#endif // _LOG4CXX_HELPERS_DATAGRAM_SOCKET_IMPL | }; // class DatagramPacket | |||
LOG4CXX_PTR_DEF(DatagramPacket); | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_DATAGRAM_PACKET | ||||
End of changes. 25 change blocks. | ||||
109 lines changed or deleted | 109 lines changed or added | |||
datagramsocket.h | datagramsocket.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | #ifndef _LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | |||
#define _LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | #define _LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/inetaddress.h> | #include <log4cxx/helpers/inetaddress.h> | |||
#include <log4cxx/helpers/pool.h> | ||||
#include <log4cxx/helpers/datagrampacket.h> | ||||
extern "C" { struct apr_socket_t; } | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class DatagramPacket; | /** This class represents a socket for sending and receivin | |||
typedef helpers::ObjectPtrT<DatagramPacket> DatagramPacketPt | g | |||
r; | datagram packets.*/ | |||
class LOG4CXX_EXPORT DatagramSocket : public helpers::Objec | ||||
tImpl | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(DatagramSocket) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DatagramSocket) | ||||
END_LOG4CXX_CAST_MAP() | ||||
class DatagramSocket; | /** Constructs a datagram socket and binds it to an | |||
typedef helpers::ObjectPtrT<DatagramSocket> DatagramSocketPt | y available port | |||
r; | on the local host machine.*/ | |||
DatagramSocket(); | ||||
/** This class represents a socket for sending and receiving | /** Constructs a datagram socket and binds it to th | |||
datagram packets.*/ | e specified | |||
class LOG4CXX_EXPORT DatagramSocket : public helpers::Object | port on the local host machine. */ | |||
Impl | DatagramSocket(int port); | |||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(DatagramSocket) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DatagramSocket) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** Constructs a datagram socket and binds it to any | /** Creates a datagram socket, bound to the specif | |||
available port | ied local | |||
on the local host machine.*/ | address. */ | |||
DatagramSocket(); | DatagramSocket(int port, InetAddressPtr laddr); | |||
/** Constructs a datagram socket and binds it to the | /** ensure the socket is closed. */ | |||
specified | ~DatagramSocket(); | |||
port on the local host machine. */ | ||||
DatagramSocket(int port); | ||||
/** Creates a datagram socket, bound to the specifi | /** Binds a datagram socket to a local port and ad | |||
ed local | dress.*/ | |||
address. */ | void bind(int lport, InetAddressPtr laddress); | |||
DatagramSocket(int port, InetAddress laddr); | ||||
/** ensure the socket is closed. */ | /** Creates a datagram socket.*/ | |||
~DatagramSocket(); | void create(); | |||
/** Binds a datagram socket to a local port and add | /** Closes this datagram socket */ | |||
ress.*/ | void close(); | |||
void bind(int lport, InetAddress laddress); | ||||
/** Creates a datagram socket.*/ | /** Connects the socket to a remote address for thi | |||
void create(); | s socket. */ | |||
void connect(InetAddressPtr address, int port); | ||||
/** Closes this datagram socket */ | /** Returns the address to which this socket is con | |||
void close(); | nected. */ | |||
inline InetAddressPtr getInetAddress() const | ||||
{ return address; } | ||||
/** Connects the socket to a remote address for this | /** Gets the local address to which the socket is b | |||
socket. */ | ound. */ | |||
void connect(InetAddress address, int port); | inline InetAddressPtr getLocalAddress() const | |||
{ return localAddress; } | ||||
/** Returns the address to which this socket is conn | /** Returns the port number on the local host to w | |||
ected. */ | hich this | |||
inline InetAddress getInetAddress() const | socket is bound. */ | |||
{ return address; } | inline int getLocalPort() const | |||
{ return localPort; } | ||||
/** Gets the local address to which the socket is bo | /** Returns the port for this socket */ | |||
und. */ | inline int getPort() const | |||
inline InetAddress getLocalAddress() const | { return port; } | |||
{ return localAddress; } | ||||
/** Returns the port number on the local host to wh | /** Returns the binding state of the socket. **/ | |||
ich this | inline bool isBound() const | |||
socket is bound. */ | { return localPort != 0; } | |||
inline int getLocalPort() const | ||||
{ return localPort; } | ||||
/** Returns the port for this socket */ | /** Returns wether the socket is closed or not. */ | |||
inline int getPort() const | inline bool isClosed() const | |||
{ return port; } | { return socket != 0; } | |||
/** Returns the binding state of the socket. **/ | /** Returns the connection state of the socket. */ | |||
inline bool isBound() const | inline bool isConnected() const | |||
{ return localPort != 0; } | { return port != 0; } | |||
/** Returns wether the socket is closed or not. */ | /** Receives a datagram packet from this socket. * | |||
inline bool isClosed() const | / | |||
{ return fd != 0; } | void receive(DatagramPacketPtr& p); | |||
/** Returns the connection state of the socket. */ | /** Sends a datagram packet from this socket. */ | |||
inline bool isConnected() const | void send(DatagramPacketPtr& p); | |||
{ return port != 0; } | ||||
/** Receives a datagram packet from this socket. */ | private: | |||
void receive(DatagramPacketPtr& p); | DatagramSocket(const DatagramSocket&); | |||
DatagramSocket& operator=(const DatagramSocket&); | ||||
/** The APR socket */ | ||||
apr_socket_t *socket; | ||||
/** Sends a datagram packet from this socket. */ | /** The memory pool for the socket */ | |||
void send(DatagramPacketPtr& p); | Pool socketPool; | |||
protected: | InetAddressPtr address; | |||
/** The file descriptor object for this socket. */ | ||||
int fd; | ||||
InetAddress address; | InetAddressPtr localAddress; | |||
InetAddress localAddress; | ||||
int port; | ||||
/** The local port number to which this socket is co | int port; | |||
nnected. */ | ||||
int localPort; | ||||
}; | /** The local port number to which this socket is c | |||
} // namespace helpers | onnected. */ | |||
}; // namespace log4cxx | int localPort; | |||
}; | ||||
LOG4CXX_PTR_DEF(DatagramSocket); | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | #endif //_LOG4CXX_HELPERS_DATAGRAM_SOCKET_H | |||
End of changes. 26 change blocks. | ||||
88 lines changed or deleted | 95 lines changed or added | |||
dateformat.h | dateformat.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_DATE_FORMAT_H | #ifndef _LOG4CXX_HELPERS_DATE_FORMAT_H | |||
#define _LOG4CXX_HELPERS_DATE_FORMAT_H | #define _LOG4CXX_HELPERS_DATE_FORMAT_H | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <log4cxx/helpers/timezone.h> | #include <log4cxx/helpers/timezone.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | ||||
Concrete class for formatting and parsing dates in a | ||||
locale-sensitive manner. | ||||
*/ | ||||
class LOG4CXX_EXPORT DateFormat | ||||
{ | ||||
public: | ||||
DateFormat(const String& dateFormat); | ||||
DateFormat(const String& dateFormat, const TimeZoneP | ||||
tr& timeZone); | ||||
virtual void format(ostream& os, int64_t time) const | ||||
; | ||||
String format(int64_t timeMillis) const; | ||||
protected: | /** | |||
TimeZonePtr timeZone; | * DateFormat is an abstract class for date/time formatting | |||
String dateFormat; | * patterned after java.text.DateFormat. | |||
}; | */ | |||
} // namespace helpers | class LOG4CXX_EXPORT DateFormat : public ObjectImpl { | |||
}; // namespace log4cxx | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(DateFormat) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DateFormat) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | ||||
* Destructor | ||||
*/ | ||||
virtual ~DateFormat(); | ||||
/** | ||||
* Formats an log4cxx_time_t into a date/time string. | ||||
* @param s string to which the date/time string is appen | ||||
ded. | ||||
* @param tm date to be formatted. | ||||
* @param p memory pool used during formatting. | ||||
*/ | ||||
virtual void format(LogString &s, log4cxx_time_t tm, log | ||||
4cxx::helpers::Pool& p) const = 0; | ||||
/** | ||||
* Sets the time zone. | ||||
* @param zone the given new time zone. | ||||
*/ | ||||
virtual void setTimeZone(const TimeZonePtr& zone); | ||||
/** | ||||
* Format an integer consistent with the format method. | ||||
* @param s string to which the numeric string is appende | ||||
d. | ||||
* @param n integer value. | ||||
* @param p memory pool used during formatting. | ||||
* @remarks This method is used by CachedDateFormat to | ||||
* format the milliseconds. | ||||
*/ | ||||
virtual void numberFormat(LogString& s, int n, log4cxx:: | ||||
helpers::Pool& p) const; | ||||
protected: | ||||
/** | ||||
* Constructor. | ||||
*/ | ||||
DateFormat(); | ||||
private: | ||||
/** | ||||
* Copy constructor definition to prevent copying. | ||||
*/ | ||||
DateFormat(const DateFormat&); | ||||
/** | ||||
* Assignment definition to prevent assignment. | ||||
*/ | ||||
DateFormat& operator=(const DateFormat&); | ||||
}; | ||||
LOG4CXX_PTR_DEF(DateFormat); | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_DATE_FORMAT_H | #endif //_LOG4CXX_HELPERS_DATE_FORMAT_H | |||
End of changes. 4 change blocks. | ||||
27 lines changed or deleted | 72 lines changed or added | |||
datelayout.h | datelayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_DATE_LAYOUT_H | #ifndef _LOG4CXX_HELPERS_DATE_LAYOUT_H | |||
#define _LOG4CXX_HELPERS_DATE_LAYOUT_H | #define _LOG4CXX_HELPERS_DATE_LAYOUT_H | |||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
#include <log4cxx/helpers/dateformat.h> | ||||
#include <log4cxx/helpers/timezone.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class DateFormat; | /** | |||
class TimeZone; | This abstract layout takes care of all the date related opt | |||
typedef helpers::ObjectPtrT<TimeZone> TimeZonePtr; | ions and | |||
formatting work. | ||||
/** | */ | |||
This abstract layout takes care of all the date related opti | class LOG4CXX_EXPORT DateLayout : public Layout | |||
ons and | { | |||
formatting work. | private: | |||
*/ | LogString timeZoneID; | |||
class LOG4CXX_EXPORT DateLayout : public Layout | LogString dateFormatOption; | |||
{ | ||||
public: | ||||
/** | ||||
String constant designating no time information. Cur | ||||
rent value of | ||||
this constant is <b>NULL</b>. | ||||
*/ | ||||
static String NULL_DATE_FORMAT; | ||||
/** | ||||
String constant designating relative time. Current v | ||||
alue of | ||||
this constant is <b>RELATIVE</b>. | ||||
*/ | ||||
static String RELATIVE_TIME_DATE_FORMAT; | ||||
static String DATE_FORMAT_OPTION; | ||||
static String TIMEZONE_OPTION; | ||||
private: | ||||
String timeZoneID; | ||||
String dateFormatOption; | ||||
protected: | ||||
DateFormat * dateFormat; | ||||
public: | protected: | |||
DateLayout(); | DateFormatPtr dateFormat; | |||
virtual ~DateLayout(); | ||||
virtual void activateOptions(); | public: | |||
virtual void setOption(const String& option, const S | DateLayout(const LogString& dateLayoutOption); | |||
tring& value); | virtual ~DateLayout(); | |||
/** | virtual void activateOptions(log4cxx::helpers::Pool | |||
The value of the <b>DateFormat</b> option should be | & p); | |||
either an | virtual void setOption(const LogString& option, con | |||
argument to the constructor of helpers::DateFormat o | st LogString& value); | |||
r one of | ||||
the srings <b>"NULL"</b>, <b>"RELATIVE"</b>, <b>"ABS | ||||
OLUTE"</b>, | ||||
<b>"DATE"</b> or <b>"ISO8601</b>. | ||||
*/ | ||||
inline void setDateFormat(const String& dateFormat) | ||||
{ this->dateFormatOption = dateFormat; } | ||||
/** | /** | |||
Returns value of the <b>DateFormat</b> option. | The value of the <b>DateFormat</b> option should be | |||
*/ | either an | |||
inline const String& getDateFormat() const | argument to the constructor of helpers::DateFormat | |||
{ return dateFormatOption; } | or one of | |||
the strings <b>"NULL"</b>, <b>"RELATIVE"</b>, <b>"A | ||||
BSOLUTE"</b>, | ||||
<b>"DATE"</b> or <b>"ISO8601</b>. | ||||
*/ | ||||
inline void setDateFormat(const LogString& dateForm | ||||
at1) | ||||
{ this->dateFormatOption.assign(dateFormat1); } | ||||
/** | /** | |||
The <b>TimeZoneID</b> option is a time zone ID strin | Returns value of the <b>DateFormat</b> option. | |||
g in the format | */ | |||
expected by the <code>locale</code> C++ standard cla | inline const LogString& getDateFormat() const | |||
ss. | { return dateFormatOption; } | |||
*/ | ||||
inline void setTimeZone(const String& timeZone) | ||||
{ this->timeZoneID = timeZone; } | ||||
/** | /** | |||
Returns value of the <b>TimeZone</b> option. | The <b>TimeZoneID</b> option is a time zone ID stri | |||
*/ | ng in the format | |||
inline const String& getTimeZone() const | expected by the <code>locale</code> C++ standard cl | |||
{ return timeZoneID; } | ass. | |||
*/ | ||||
inline void setTimeZone(const LogString& timeZone) | ||||
{ this->timeZoneID.assign(timeZone); } | ||||
void formatDate(ostream &os, const spi::LoggingEvent | /** | |||
Ptr& event) const; | Returns value of the <b>TimeZone</b> option. | |||
*/ | ||||
inline const LogString& getTimeZone() const | ||||
{ return timeZoneID; } | ||||
protected: | void formatDate(LogString &s, | |||
/** | const spi::LoggingEventPtr& event, | |||
Sets the DateFormat used to format date and time in | log4cxx::helpers::Pool& p) const; | |||
the time zone | ||||
determined by <code>timeZone</code> parameter. The | ||||
helpers::DateFormat DateFormat used | ||||
will depend on the <code>dateFormatType</code>. | ||||
<p>The recognized types are #NULL_DATE_FORMAT, | private: | |||
#RELATIVE_TIME_DATE_FORMAT, | // | |||
helpers::AbsoluteTimeDateFormat#ABS_TIME_DATE_FORMAT | // prevent copy and assignment | |||
, | DateLayout(const DateLayout&); | |||
helpers::AbsoluteTimeDateFormat#DATE_AND_TIME_DATE_F | DateLayout& operator=(const DateLayout&); | |||
ORMAT and | ||||
helpers::AbsoluteTimeDateFormat#ISO8601_DATE_FORMAT. | ||||
If the | ||||
<code>dateFormatType</code> is not one of the above, | ||||
then the | ||||
argument is assumed to be a date pattern for | ||||
helpers::DateFormat. | ||||
*/ | ||||
void setDateFormat(const String& dateFormatType, | ||||
const TimeZonePtr& timeZone); | ||||
}; | }; | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif // _LOG4CXX_HELPERS_DATE_LAYOUT_H | #endif // _LOG4CXX_HELPERS_DATE_LAYOUT_H | |||
End of changes. 13 change blocks. | ||||
104 lines changed or deleted | 70 lines changed or added | |||
datetimedateformat.h | datetimedateformat.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | #ifndef _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | |||
#define _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | #define _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | |||
#include <log4cxx/helpers/dateformat.h> | #include <log4cxx/helpers/simpledateformat.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Formats a date in the format <b>\%d-\%m-\%Y \%H:\%M:\%S,\%Q< | Formats a date in the format <b>dd MMM yyyy HH:mm:ss,SSS</b | |||
/b> for example, | > for example, | |||
"06 Nov 1994 15:49:37,459". | "06 Nov 1994 15:49:37,459". | |||
*/ | */ | |||
class LOG4CXX_EXPORT DateTimeDateFormat : public DateFormat | class LOG4CXX_EXPORT DateTimeDateFormat : public SimpleDate | |||
{ | Format | |||
public: | { | |||
DateTimeDateFormat(const TimeZonePtr& timeZone) | public: | |||
: DateFormat(_T("%d %b %Y %H:%M:%S,%Q"), timeZone) | DateTimeDateFormat() | |||
{} | : SimpleDateFormat(LOG4CXX_STR("dd MMM yyyy HH:mm: | |||
}; | ss,SSS")) {} | |||
} // namespace helpers | DateTimeDateFormat(const std::locale* locale) | |||
}; // namespace log4cxx | : SimpleDateFormat(LOG4CXX_STR("dd MMM yyyy HH:mm | |||
:ss,SSS"), locale) {} | ||||
}; | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | #endif // _LOG4CXX_HELPERS_DATE_TIME_DATE_FORMAT_H | |||
End of changes. 3 change blocks. | ||||
22 lines changed or deleted | 27 lines changed or added | |||
defaultrepositoryselector.h | defaultrepositoryselector.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | #ifndef _LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | |||
#define _LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | #define _LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | |||
#include <log4cxx/spi/repositoryselector.h> | #include <log4cxx/spi/repositoryselector.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/spi/loggerrepository.h> | #include <log4cxx/spi/loggerrepository.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class LOG4CXX_EXPORT DefaultRepositorySelector : | class LOG4CXX_EXPORT DefaultRepositorySelector : | |||
public virtual RepositorySelector, | public virtual RepositorySelector, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(DefaultRepositorySel | DECLARE_ABSTRACT_LOG4CXX_OBJECT(DefaultRepositorySe | |||
ector) | lector) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(RepositorySelector) | LOG4CXX_CAST_ENTRY(RepositorySelector) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
DefaultRepositorySelector(const LoggerRepositoryPtr& | ||||
repository) | ||||
: repository(repository) | ||||
{ | ||||
} | ||||
virtual LoggerRepositoryPtr& getLoggerRepository() | DefaultRepositorySelector(const LoggerRepositoryPtr | |||
{ | & repository1); | |||
return repository; | void addRef() const; | |||
} | void releaseRef() const; | |||
virtual LoggerRepositoryPtr& getLoggerRepository(); | ||||
private: | private: | |||
LoggerRepositoryPtr repository; | LoggerRepositoryPtr repository; | |||
}; | }; | |||
} // namespace spi | } // namespace spi | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | #endif //_LOG4CXX_SPI_DEFAULT_REPOSITORY_SELECTOR_H | |||
End of changes. 4 change blocks. | ||||
32 lines changed or deleted | 28 lines changed or added | |||
denyallfilter.h | denyallfilter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_VARIA_DENY_ALL_FILTER_H | #ifndef _LOG4CXX_FILTER_DENY_ALL_FILTER_H | |||
#define _LOG4CXX_VARIA_DENY_ALL_FILTER_H | #define _LOG4CXX_FILTER_DENY_ALL_FILTER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/filter.h> | #include <log4cxx/spi/filter.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace varia | namespace filter | |||
{ | { | |||
/** | /** | |||
This filter drops all logging events. | This filter drops all logging events. | |||
<p>You can add this filter to the end of a filter chain to | <p>You can add this filter to the end of a filter chain to | |||
switch from the default "accept all unless instructed otherw | switch from the default "accept all unless instructed other | |||
ise" | wise" | |||
filtering behaviour to a "deny all unless instructed otherwi | filtering behaviour to a "deny all unless instructed otherw | |||
se" | ise" | |||
behaviour. | behaviour. | |||
*/ | */ | |||
class DenyAllFilter; | ||||
typedef helpers::ObjectPtrT<DenyAllFilter> DenyAllFilterPtr; | ||||
class LOG4CXX_EXPORT DenyAllFilter : public spi::Filter | class LOG4CXX_EXPORT DenyAllFilter : public spi::Filter | |||
{ | { | |||
public: | public: | |||
typedef spi::Filter BASE_CLASS; | DenyAllFilter() : spi::Filter() { | |||
DECLARE_LOG4CXX_OBJECT(DenyAllFilter) | } | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(DenyAllFilter) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | typedef spi::Filter BASE_CLASS; | |||
Always returns the integer constant {@link spi::Filt | DECLARE_LOG4CXX_OBJECT(DenyAllFilter) | |||
er#DENY DENY} | BEGIN_LOG4CXX_CAST_MAP() | |||
regardless of the {@link spi::LoggingEvent LoggingEv | LOG4CXX_CAST_ENTRY(DenyAllFilter) | |||
ent} parameter. | LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | |||
@param event The LoggingEvent to filter. | END_LOG4CXX_CAST_MAP() | |||
@return Always returns {@link spi::Filter#DENY DENY} | ||||
. | ||||
*/ | ||||
FilterDecision decide(const spi::LoggingEventPtr& ev | ||||
ent) const | ||||
{ return spi::Filter::DENY; } | ||||
}; // class DenyAllFilter | ||||
} // namespace varia | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_VARIA_DENY_ALL_FILTER_H | /** | |||
Always returns the integer constant {@link spi::Fil | ||||
ter#DENY DENY} | ||||
regardless of the {@link spi::LoggingEvent LoggingE | ||||
vent} parameter. | ||||
@param event The LoggingEvent to filter. | ||||
@return Always returns {@link spi::Filter#DENY DENY | ||||
}. | ||||
*/ | ||||
FilterDecision decide(const spi::LoggingEventPtr& / | ||||
* event */) const | ||||
{ return spi::Filter::DENY; } | ||||
}; // class DenyAllFilter | ||||
LOG4CXX_PTR_DEF(DenyAllFilter); | ||||
} // namespace filter | ||||
} // namespace log4cxx | ||||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif // _LOG4CXX_FILTER_DENY_ALL_FILTER_H | ||||
End of changes. 6 change blocks. | ||||
44 lines changed or deleted | 35 lines changed or added | |||
domconfigurator.h | domconfigurator.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_XML_DOM_CONFIGURATOR_H | #ifndef _LOG4CXX_XML_DOM_CONFIGURATOR_H | |||
#define _LOG4CXX_XML_DOM_CONFIGURATOR_H | #define _LOG4CXX_XML_DOM_CONFIGURATOR_H | |||
#include <log4cxx/config.h> | #if defined(_MSC_VER) | |||
#pragma warning (push) | ||||
#ifdef HAVE_XML | #pragma warning ( disable: 4231 4251 4275 4786 ) | |||
#endif | ||||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <map> | #include <map> | |||
#include <log4cxx/appender.h> | #include <log4cxx/appender.h> | |||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
#include <log4cxx/logger.h> | #include <log4cxx/logger.h> | |||
#include <log4cxx/helpers/properties.h> | #include <log4cxx/helpers/properties.h> | |||
#include <log4cxx/spi/configurator.h> | #include <log4cxx/spi/configurator.h> | |||
#include <log4cxx/helpers/charsetdecoder.h> | ||||
#include <log4cxx/spi/filter.h> | ||||
#include <log4cxx/rolling/triggeringpolicy.h> | ||||
#include <log4cxx/rolling/rollingpolicy.h> | ||||
#include <log4cxx/file.h> | ||||
#include <log4cxx/config/propertysetter.h> | ||||
extern "C" { | ||||
struct apr_xml_doc; | ||||
struct apr_xml_elem; | ||||
} | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | ||||
{ | ||||
class LoggerRepository; | ||||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | ||||
ryPtr; | ||||
class Filter; | ||||
typedef helpers::ObjectPtrT<Filter> FilterPtr; | ||||
class AppenderAttachable; | namespace xml | |||
typedef helpers::ObjectPtrT<AppenderAttachable> AppenderAtta | { | |||
chablePtr; | ||||
class OptionHandler; | ||||
typedef helpers::ObjectPtrT<OptionHandler> OptionHandlerPtr; | ||||
} | ||||
namespace helpers | /** | |||
{ | Use this class to initialize the log4cxx environment using a | |||
class XMLDOMDocument; | DOM tree. | |||
typedef helpers::ObjectPtrT<XMLDOMDocument> XMLDOMDocumentPt | ||||
r; | ||||
class XMLDOMElement; | <p>Sometimes it is useful to see how log4cxx is reading confi | |||
typedef helpers::ObjectPtrT<XMLDOMElement> XMLDOMElementPtr; | guration | |||
} | files. You can enable log4cxx internal logging by setting the | |||
<code>debug</code> attribute in the | ||||
<code>log4cxx</code> element. As in | ||||
<pre> | ||||
<log4j:configuration <b>debug="true"</b> xmlns:log | ||||
4j="http://jakarta.apache.org/log4j/"> | ||||
... | ||||
</log4j:configuration> | ||||
</pre> | ||||
namespace config | <p>There are sample XML files included in the package. | |||
{ | */ | |||
class PropertySetter; | class LOG4CXX_EXPORT DOMConfigurator : | |||
} | virtual public spi::Configurator, | |||
virtual public helpers::ObjectImpl | ||||
{ | ||||
protected: | ||||
typedef std::map<LogString, AppenderPtr> AppenderMa | ||||
p; | ||||
/** | ||||
Used internally to parse appenders by IDREF name. | ||||
*/ | ||||
AppenderPtr findAppenderByName( | ||||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8De | ||||
coder, | ||||
apr_xml_elem* elem, | ||||
apr_xml_doc* doc, | ||||
const LogString& appenderName, | ||||
AppenderMap& appenders); | ||||
namespace xml | /** | |||
{ | Used internally to parse appenders by IDREF element | |||
class AppenderMap | . | |||
{ | */ | |||
public: | AppenderPtr findAppenderByReference( | |||
AppenderPtr get(const String& appenderName); | log4cxx::helpers::Pool& p, | |||
void put(const String& appenderName, AppenderPtr app | log4cxx::helpers::CharsetDecoderPtr& utf8De | |||
ender); | coder, | |||
apr_xml_elem* appenderRef, | ||||
apr_xml_doc* doc, | ||||
AppenderMap& appenders); | ||||
protected: | /** | |||
std::map<String, AppenderPtr> map; | Used internally to parse an appender element. | |||
}; | */ | |||
AppenderPtr parseAppender( | ||||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* appenderElement, | ||||
apr_xml_doc* doc, | ||||
AppenderMap& appenders); | ||||
/** | /** | |||
Use this class to initialize the log4cxx environment using a DOM tree. | Used internally to parse an {@link spi::ErrorHandle | |||
r ErrorHandler } element. | ||||
*/ | ||||
void parseErrorHandler( | ||||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* element, | ||||
AppenderPtr& appender, | ||||
apr_xml_doc* doc, | ||||
AppenderMap& appenders); | ||||
<p>Sometimes it is useful to see how log4cxx is reading configuration | /** | |||
files. You can enable log4cxx internal logging by setting the | Used internally to parse a filter element. | |||
<code>debug</code> attribute in the | */ | |||
<code>log4cxx</code> element. As in | void parseFilters( | |||
<pre> | log4cxx::helpers::Pool& p, | |||
<log4j:configuration <b>debug="true"</b> xmlns:log4j="http://jaka | log4cxx::helpers::CharsetDecoderPtr& utf8Decoder | |||
rta.apache.org/log4j/"> | , | |||
... | apr_xml_elem* element, | |||
</log4j:configuration> | std::vector<log4cxx::spi::FilterPtr>& filters); | |||
</pre> | ||||
<p>There are sample XML files included in the package. | /** | |||
*/ | Used internally to parse a logger element. | |||
class LOG4CXX_EXPORT DOMConfigurator : | */ | |||
virtual public spi::Configurator, | void parseLogger( | |||
virtual public helpers::ObjectImpl | log4cxx::helpers::Pool& p, | |||
{ | log4cxx::helpers::CharsetDecoderPtr& utf8Decode | |||
protected: | r, | |||
/** | apr_xml_elem* loggerElement, | |||
Used internally to parse appenders by IDREF name. | apr_xml_doc* doc, | |||
*/ | AppenderMap& appenders); | |||
AppenderPtr findAppenderByName(helpers::XMLDOMDocume | ||||
ntPtr doc, | ||||
const String& appenderName); | ||||
/** | /** | |||
Used internally to parse appenders by IDREF element. | Used internally to parse the logger factory elemen | |||
*/ | t. | |||
AppenderPtr findAppenderByReference( | */ | |||
helpers::XMLDOMElementPtr appenderRef); | void parseLoggerFactory( | |||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* factoryElement); | ||||
/** | /** | |||
Used internally to parse an appender element. | Used internally to parse the logger factory elemen | |||
*/ | t. | |||
AppenderPtr parseAppender(helpers::XMLDOMElementPtr | */ | |||
appenderElement); | log4cxx::helpers::ObjectPtr parseTriggeringPolicy( | |||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* factoryElement); | ||||
/** | /** | |||
Used internally to parse an {@link spi::ErrorHandler | Used internally to parse the logger factory elemen | |||
ErrorHandler } element. | t. | |||
*/ | */ | |||
void parseErrorHandler(helpers::XMLDOMElementPtr ele | log4cxx::rolling::RollingPolicyPtr parseRollingPoli | |||
ment, AppenderPtr appender); | cy( | |||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* factoryElement); | ||||
/** | /** | |||
Used internally to parse a filter element. | Used internally to parse the root logger element. | |||
*/ | */ | |||
void parseFilters(helpers::XMLDOMElementPtr element, | void parseRoot(log4cxx::helpers::Pool& p, | |||
AppenderPtr appender); | log4cxx::helpers::CharsetDecoderPtr& utf8Decode | |||
r, | ||||
apr_xml_elem* rootElement, apr_xml_doc* doc, Ap | ||||
penderMap& appenders); | ||||
/** | /** | |||
Used internally to parse a logger element. | Used internally to parse the children of a logger | |||
*/ | element. | |||
void parseLogger(helpers::XMLDOMElementPtr loggerEle | */ | |||
ment); | void parseChildrenOfLoggerElement( | |||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8De | ||||
coder, | ||||
apr_xml_elem* catElement, | ||||
LoggerPtr logger, bool isRoot, | ||||
apr_xml_doc* doc, | ||||
AppenderMap& appenders); | ||||
/** | /** | |||
Used internally to parse the logger factory element | Used internally to parse a layout element. | |||
. | */ | |||
*/ | LayoutPtr parseLayout( | |||
void parseLoggerFactory(helpers::XMLDOMElementPtr fa | log4cxx::helpers::Pool& p, | |||
ctoryElement); | log4cxx::helpers::CharsetDecoderPtr& utf8Decode | |||
r, | ||||
apr_xml_elem* layout_element); | ||||
/** | /** | |||
Used internally to parse the roor category element. | Used internally to parse a level element. | |||
*/ | */ | |||
void parseRoot(helpers::XMLDOMElementPtr rootElement | void parseLevel( | |||
); | log4cxx::helpers::Pool& p, | |||
log4cxx::helpers::CharsetDecoderPtr& utf8De | ||||
coder, | ||||
apr_xml_elem* element, | ||||
LoggerPtr logger, bool isRoot); | ||||
/** | void setParameter( | |||
Used internally to parse the children of a category | log4cxx::helpers::Pool& p, | |||
element. | log4cxx::helpers::CharsetDecoderPtr& utf8De | |||
*/ | coder, | |||
void parseChildrenOfLoggerElement(helpers::XMLDOMEle | apr_xml_elem* elem, | |||
mentPtr catElement, | log4cxx::config::PropertySetter& propSetter); | |||
LoggerPtr logger, bool isRoot); | ||||
/** | /** | |||
Used internally to parse a layout element. | Used internally to configure the log4cxx framework | |||
*/ | from | |||
LayoutPtr parseLayout(helpers::XMLDOMElementPtr layo | an in-memory representation of an XML document. | |||
ut_element); | */ | |||
void parse( | ||||
log4cxx::helpers::Pool& p, | ||||
log4cxx::helpers::CharsetDecoderPtr& utf8Decode | ||||
r, | ||||
apr_xml_elem* element, | ||||
apr_xml_doc* doc, | ||||
AppenderMap& appenders); | ||||
/** | public: | |||
Used internally to parse a level element. | DOMConfigurator(); | |||
*/ | ||||
void parseLevel(helpers::XMLDOMElementPtr element, | ||||
LoggerPtr logger, bool isRoot); | ||||
void setParameter(helpers::XMLDOMElementPtr elem, | DECLARE_LOG4CXX_OBJECT(DOMConfigurator) | |||
config::PropertySetter& propSetter); | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(spi::Configurator) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | DOMConfigurator(log4cxx::helpers::Pool& p); | |||
Used internally to configure the log4cxx framework | ||||
by parsing a DOM | ||||
tree of XML elements based on <a | ||||
href="docs/log4j.dtd">log4j.dtd</a>. | ||||
*/ | void addRef() const; | |||
void parse(helpers::XMLDOMElementPtr element); | void releaseRef() const; | |||
public: | /** | |||
DECLARE_LOG4CXX_OBJECT(DOMConfigurator) | A static version of #doConfigure. | |||
BEGIN_LOG4CXX_CAST_MAP() | */ | |||
LOG4CXX_CAST_ENTRY(spi::Configurator) | static void configure(const std::string& filename); | |||
END_LOG4CXX_CAST_MAP() | #if LOG4CXX_WCHAR_T_API | |||
static void configure(const std::wstring& filename) | ||||
; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
static void configure(const std::basic_string<UniCh | ||||
ar>& filename); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
static void configure(const CFStringRef& filename); | ||||
#endif | ||||
/** | ||||
Like #configureAndWatch(const std::string& configFi | ||||
lename, long delay) | ||||
except that the default delay as defined by | ||||
log4cxx::helpers::FileWatchdog#DEFAULT_DELAY is use | ||||
d. | ||||
@param configFilename A log4j configuration file in | ||||
XML format. | ||||
*/ | ||||
static void configureAndWatch(const std::string& co | ||||
nfigFilename); | ||||
#if LOG4CXX_WCHAR_T_API | ||||
static void configureAndWatch(const std::wstring& c | ||||
onfigFilename); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
static void configureAndWatch(const std::basic_stri | ||||
ng<UniChar>& configFilename); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
static void configureAndWatch(const CFStringRef& co | ||||
nfigFilename); | ||||
#endif | ||||
/** | ||||
Read the configuration file <code>configFilename</c | ||||
ode> if it | ||||
exists. Moreover, a thread will be created that wil | ||||
l periodically | ||||
check if <code>configFilename</code> has been creat | ||||
ed or | ||||
modified. The period is determined by the <code>del | ||||
ay</code> | ||||
argument. If a change or file creation is detected, | ||||
then | ||||
<code>configFilename</code> is read to configure lo | ||||
g4cxx. | ||||
/** | @param configFilename A log4j configuration file in | |||
A static version of #doConfigure. | XML format. | |||
*/ | @param delay The delay in milliseconds to wait betw | |||
static void configure(const String& filename); | een each check. | |||
*/ | ||||
static void configureAndWatch(const std::string& co | ||||
nfigFilename, | ||||
long delay); | ||||
#if LOG4CXX_WCHAR_T_API | ||||
static void configureAndWatch(const std::wstring& c | ||||
onfigFilename, | ||||
long delay); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
static void configureAndWatch(const std::basic_stri | ||||
ng<UniChar>& configFilename, | ||||
long delay); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
static void configureAndWatch(const CFStringRef& co | ||||
nfigFilename, | ||||
long delay); | ||||
#endif | ||||
/** | /** | |||
Like #configureAndWatch(const String& configFilename | Interpret the XML file pointed by <code>filename</c | |||
, long delay) | ode> and set up | |||
except that the default delay as defined by | log4cxx accordingly. | |||
FileWatchdog#DEFAULT_DELAY is used. | <p>The configuration is done relative to the hierar | |||
@param configFilename A log4j configuration file in | chy parameter. | |||
XML format. | @param filename The file to parse. | |||
*/ | @param repository The hierarchy to operation upon. | |||
static void configureAndWatch(const String& configFi | */ | |||
lename); | void doConfigure(const File& filename, | |||
spi::LoggerRepositoryPtr& repository); | ||||
/** | protected: | |||
Read the configuration file <code>configFilename</co | static LogString getAttribute( | |||
de> if it | log4cxx::helpers::CharsetDecoderPtr& utf8Decode | |||
exists. Moreover, a thread will be created that will | r, | |||
periodically | apr_xml_elem*, | |||
check if <code>configFilename</code> has been create | const std::string& attrName); | |||
d or | ||||
modified. The period is determined by the <code>dela | ||||
y</code> | ||||
argument. If a change or file creation is detected, | ||||
then | ||||
<code>configFilename</code> is read to configure log | ||||
4cxx. | ||||
@param configFilename A log4j configuration file in | LogString subst(const LogString& value); | |||
XML format. | ||||
@param delay The delay in milliseconds to wait betwe | ||||
en each check. | ||||
*/ | ||||
static void configureAndWatch(const String& configFi | ||||
lename, | ||||
long delay); | ||||
/** | protected: | |||
Interpret the XML file pointed by <code>filename</co | helpers::Properties props; | |||
de> and set up | spi::LoggerRepositoryPtr repository; | |||
log4cxx accordingly. | spi::LoggerFactoryPtr loggerFactory; | |||
<p>The configuration is done relative to the hierarc | ||||
hy parameter. | ||||
@param filename The file to parse. | ||||
@param repository The hierarchy to operation upon. | ||||
*/ | ||||
void doConfigure(const String& filename, | ||||
spi::LoggerRepositoryPtr& repository); | ||||
protected: | private: | |||
String subst(const String& value); | // prevent assignment or copy statements | |||
DOMConfigurator(const DOMConfigurator&); | ||||
DOMConfigurator& operator=(const DOMConfigurator&); | ||||
protected: | }; | |||
void * appenderBag; | LOG4CXX_PTR_DEF(DOMConfigurator); | |||
} // namespace xml | ||||
} // namespace log4cxx | ||||
helpers::Properties props; | #if defined(_MSC_VER) | |||
spi::LoggerRepositoryPtr repository; | #pragma warning (pop) | |||
spi::LoggerFactoryPtr loggerFactory; | #endif | |||
}; | ||||
} // namespace xml | ||||
}; // namespace log4cxx | ||||
#endif // HAVE_XML | ||||
#endif // _LOG4CXX_XML_DOM_CONFIGURATOR_H | #endif // _LOG4CXX_XML_DOM_CONFIGURATOR_H | |||
End of changes. 37 change blocks. | ||||
199 lines changed or deleted | 309 lines changed or added | |||
errorhandler.h | errorhandler.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_ERROR_HANDLER_H | #ifndef _LOG4CXX_SPI_ERROR_HANDLER_H | |||
#define _LOG4CXX_SPI_ERROR_HANDLER_H | #define _LOG4CXX_SPI_ERROR_HANDLER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/optionhandler.h> | #include <log4cxx/spi/optionhandler.h> | |||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/object.h> | ||||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
#include <log4cxx/appender.h> | ||||
#include <log4cxx/spi/loggingevent.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Appender; | ||||
typedef log4cxx::helpers::ObjectPtrT<Appender> AppenderPtr; | ||||
class Logger; | ||||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | ||||
namespace spi | namespace spi | |||
{ | { | |||
class ErrorCode | class ErrorCode | |||
{ | { | |||
public: | public: | |||
enum | enum | |||
{ | { | |||
GENERIC_FAILURE = 0, | GENERIC_FAILURE = 0, | |||
WRITE_FAILURE = 1, | WRITE_FAILURE = 1, | |||
FLUSH_FAILURE = 2, | FLUSH_FAILURE = 2, | |||
CLOSE_FAILURE = 3, | CLOSE_FAILURE = 3, | |||
FILE_OPEN_FAILURE = 4, | FILE_OPEN_FAILURE = 4, | |||
MISSING_LAYOUT = 5, | MISSING_LAYOUT = 5, | |||
ADDRESS_PARSE_FAILURE = 6 | ADDRESS_PARSE_FAILURE = 6 | |||
}; | }; | |||
}; | }; | |||
class LoggingEvent; | /** | |||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | Appenders may delegate their error handling to | |||
<code>ErrorHandlers</code>. | ||||
class ErrorHandler; | <p>Error handling is a particularly tedious to get right be | |||
typedef log4cxx::helpers::ObjectPtrT<ErrorHandler> ErrorHand | cause by | |||
lerPtr; | definition errors are hard to predict and to reproduce. | |||
/** | <p>Please take the time to contact the author in case you d | |||
Appenders may delegate their error handling to | iscover | |||
<code>ErrorHandlers</code>. | that errors are not properly handled. You are most welcome | |||
to | ||||
suggest new error handling policies or criticize existing p | ||||
olicies. | ||||
*/ | ||||
class LOG4CXX_EXPORT ErrorHandler : public virtual OptionHa | ||||
ndler | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(ErrorHandler) | ||||
virtual ~ErrorHandler() {} | ||||
<p>Error handling is a particularly tedious to get right bec | /** | |||
ause by | Add a reference to a logger to which the failing ap | |||
definition errors are hard to predict and to reproduce. | pender might | |||
be attached to. The failing appender will be search | ||||
ed and | ||||
replaced only in the loggers you add through this m | ||||
ethod. | ||||
<p>Please take the time to contact the author in case you di | @param logger One of the loggers that will be searc | |||
scover | hed for the failing | |||
that errors are not properly handled. You are most welcome t | appender in view of replacement. | |||
o | */ | |||
suggest new error handling policies or criticize existing po | virtual void setLogger(const LoggerPtr& logger) = 0 | |||
licies. | ; | |||
*/ | ||||
class LOG4CXX_EXPORT ErrorHandler : public virtual OptionHan | ||||
dler | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(ErrorHandler) | ||||
virtual ~ErrorHandler() {} | ||||
/** | /** | |||
Add a reference to a logger to which the failing app | Equivalent to the error(const String&, helpers::Exc | |||
ender might | eption&, int, | |||
be attached to. The failing appender will be searche | spi::LoggingEvent&) with the the event parameteter | |||
d and | set to | |||
replaced only in the loggers you add through this me | null. | |||
thod. | */ | |||
virtual void error(const LogString& message, const | ||||
std::exception& e, | ||||
int errorCode) const = 0; | ||||
@param logger One of the loggers that will be search | /** | |||
ed for the failing | This method is normally used to just print the erro | |||
appender in view of replacement. | r message | |||
*/ | passed as a parameter. | |||
virtual void setLogger(const LoggerPtr& logger) = 0; | */ | |||
virtual void error(const LogString& message) const | ||||
= 0; | ||||
/** | /** | |||
Equivalent to the error(const String&, helpers::Exce | This method is invoked to handle the error. | |||
ption&, int, | ||||
spi::LoggingEvent&) with the the event parameteter s | ||||
et to | ||||
null. | ||||
*/ | ||||
virtual void error(const String& message, helpers::E | ||||
xception& e, | ||||
int errorCode) const = 0; | ||||
/** | @param message The message assoicated with the erro | |||
This method is normally used to just print the error | r. | |||
message | @param e The Exption that was thrown when the error | |||
passed as a parameter. | occured. | |||
*/ | @param errorCode The error code associated with the | |||
virtual void error(const String& message) const = 0; | error. | |||
@param event The logging event that the failing app | ||||
ender is asked | ||||
to log. | ||||
*/ | ||||
virtual void error(const LogString& message, const | ||||
std::exception& e, | ||||
int errorCode, const LoggingEventPtr& event | ||||
) const = 0; | ||||
/** | /** | |||
This method is invoked to handle the error. | Set the appender for which errors are handled. This | |||
method is | ||||
usually called when the error handler is configured | ||||
. | ||||
*/ | ||||
virtual void setAppender(const AppenderPtr& appende | ||||
r) = 0; | ||||
@param message The message assoicated with the error | /** | |||
. | Set the appender to fallback upon in case of failur | |||
@param e The Exption that was thrown when the error | e. | |||
occured. | */ | |||
@param errorCode The error code associated with the | virtual void setBackupAppender(const AppenderPtr& a | |||
error. | ppender) = 0; | |||
@param event The logging event that the failing appe | }; | |||
nder is asked | ||||
to log. | ||||
*/ | ||||
virtual void error(const String& message, helpers::E | ||||
xception& e, | ||||
int errorCode, const LoggingEventPtr& event) | ||||
const = 0; | ||||
/** | LOG4CXX_PTR_DEF(ErrorHandler); | |||
Set the appender for which errors are handled. This | } //namespace spi | |||
method is | } //namespace log4cxx | |||
usually called when the error handler is configured. | ||||
*/ | ||||
virtual void setAppender(const AppenderPtr& appender | ||||
) = 0; | ||||
/** | #if defined(_MSC_VER) | |||
Set the appender to fallback upon in case of failure | #pragma warning ( pop ) | |||
. | #endif | |||
*/ | ||||
virtual void setBackupAppender(const AppenderPtr& ap | ||||
pender) = 0; | ||||
}; | ||||
} //namespace spi | ||||
}; //namespace log4cxx | ||||
#endif //_LOG4CXX_SPI_ERROR_HANDLER_H | #endif //_LOG4CXX_SPI_ERROR_HANDLER_H | |||
End of changes. 19 change blocks. | ||||
112 lines changed or deleted | 114 lines changed or added | |||
exception.h | exception.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_EXCEPTION_H | #ifndef _LOG4CXX_HELPERS_EXCEPTION_H | |||
#define _LOG4CXX_HELPERS_EXCEPTION_H | #define _LOG4CXX_HELPERS_EXCEPTION_H | |||
#include <log4cxx/helpers/tchar.h> | #include <exception> | |||
#include <log4cxx/log4cxx.h> | ||||
#include <log4cxx/logstring.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** The class Exception and its subclasses indicate conditio | /** The class Exception and its subclasses indicate conditi | |||
ns that a | ons that a | |||
reasonable application might want to catch. | reasonable application might want to catch. | |||
*/ | */ | |||
class LOG4CXX_EXPORT Exception | class LOG4CXX_EXPORT Exception : public ::std::exception | |||
{ | { | |||
public: | public: | |||
Exception() {} | Exception(const char* msg); | |||
Exception(const String& message): message(message) { | Exception(const LogString& msg); | |||
} | Exception(const Exception& src); | |||
inline const String& getMessage() { return message; | Exception& operator=(const Exception& src); | |||
} | const char* what() const throw(); | |||
private: | ||||
enum { MSG_SIZE = 128 }; | ||||
char msg[MSG_SIZE + 1]; | ||||
}; // class Exception | ||||
protected: | /** RuntimeException is the parent class of those exception | |||
String message; | s that can be | |||
thrown during the normal operation of the process. | ||||
*/ | ||||
class LOG4CXX_EXPORT RuntimeException : public Exception | ||||
{ | ||||
public: | ||||
RuntimeException(log4cxx_status_t stat); | ||||
RuntimeException(const LogString& msg); | ||||
RuntimeException(const RuntimeException& msg); | ||||
RuntimeException& operator=(const RuntimeException& | ||||
src); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t sta | ||||
t); | ||||
}; // class RuntimeException | ||||
}; // class Exception | /** Thrown when an application attempts to use null in a ca | |||
se where an | ||||
object is required. | ||||
*/ | ||||
class LOG4CXX_EXPORT NullPointerException : public Runtime | ||||
Exception | ||||
{ | ||||
public: | ||||
NullPointerException(const LogString& msg); | ||||
NullPointerException(const NullPointerException& ms | ||||
g); | ||||
NullPointerException& operator=(const NullPointerEx | ||||
ception& src); | ||||
}; // class NullPointerException | ||||
/** RuntimeException is the parent class of those exceptions | /** Thrown to indicate that a method has been passed | |||
that can be | an illegal or inappropriate argument.*/ | |||
thrown during the normal operation of the process. | class LOG4CXX_EXPORT IllegalArgumentException : public Runt | |||
*/ | imeException | |||
class LOG4CXX_EXPORT RuntimeException : public Exception | { | |||
{ | public: | |||
public: | IllegalArgumentException(const LogString& msg); | |||
RuntimeException() {} | IllegalArgumentException(const IllegalArgumentException& | |||
RuntimeException(const String& message) | ); | |||
: Exception(message) {} | IllegalArgumentException& operator=(const IllegalArgumen | |||
}; // class RuntimeException | tException&); | |||
}; // class IllegalArgumentException | ||||
/** Thrown when an application attempts to use null in a cas | /** Signals that an I/O exception of some sort has occurred | |||
e where an | . This class | |||
object is required. | is the general class of exceptions produced by failed or in | |||
*/ | terrupted | |||
class LOG4CXX_EXPORT NullPointerException : public RuntimeE | I/O operations. | |||
xception | */ | |||
{ | class LOG4CXX_EXPORT IOException : public Exception | |||
public: | { | |||
NullPointerException() {} | public: | |||
NullPointerException(const String& message) | IOException(); | |||
: RuntimeException(message) {} | IOException(log4cxx_status_t stat); | |||
}; // class NullPointerException | IOException(const LogString& msg); | |||
IOException(const IOException &src); | ||||
IOException& operator=(const IOException&); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t stat); | ||||
}; | ||||
/** Thrown to indicate that a method has been passed | class LOG4CXX_EXPORT MissingResourceException : public Exce | |||
an illegal or inappropriate argument.*/ | ption | |||
class LOG4CXX_EXPORT IllegalArgumentException : public Runti | { | |||
meException | public: | |||
{ | MissingResourceException(const LogString& key); | |||
public: | MissingResourceException(const MissingResourceException | |||
IllegalArgumentException(const String& message) | &src); | |||
: RuntimeException(message) {} | MissingResourceException& operator=(const MissingResour | |||
}; // class IllegalArgumentException | ceException&); | |||
private: | ||||
static LogString formatMessage(const LogString& key); | ||||
}; | ||||
/** Signals that an I/O exception of some sort has occurred. | class LOG4CXX_EXPORT PoolException : public Exception | |||
This class | { | |||
is the general class of exceptions produced by failed or int | public: | |||
errupted | PoolException(log4cxx_status_t stat); | |||
I/O operations. | PoolException(const PoolException &src); | |||
*/ | PoolException& operator=(const PoolException&); | |||
class LOG4CXX_EXPORT IOException : public Exception | private: | |||
{ | static LogString formatMessage(log4cxx_status_t stat) | |||
}; | ; | |||
} // namespace helpers | }; | |||
}; // namespace log4cxx | ||||
class LOG4CXX_EXPORT MutexException : public Exception | ||||
{ | ||||
public: | ||||
MutexException(log4cxx_status_t stat); | ||||
MutexException(const MutexException &src); | ||||
MutexException& operator=(const MutexException&); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t stat) | ||||
; | ||||
}; | ||||
class LOG4CXX_EXPORT InterruptedException : public Exceptio | ||||
n | ||||
{ | ||||
public: | ||||
InterruptedException(); | ||||
InterruptedException(log4cxx_status_t stat); | ||||
InterruptedException(const InterruptedException &src) | ||||
; | ||||
InterruptedException& operator=(const InterruptedExce | ||||
ption&); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t stat) | ||||
; | ||||
}; | ||||
class LOG4CXX_EXPORT ThreadException | ||||
: public Exception { | ||||
public: | ||||
ThreadException(log4cxx_status_t stat); | ||||
ThreadException(const LogString& msg); | ||||
ThreadException(const ThreadException &src); | ||||
ThreadException& operator=(const ThreadException&); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t stat) | ||||
; | ||||
}; | ||||
class LOG4CXX_EXPORT TranscoderException : public Exception | ||||
{ | ||||
public: | ||||
TranscoderException(log4cxx_status_t stat); | ||||
TranscoderException(const TranscoderException &src); | ||||
TranscoderException& operator=(const TranscoderExcept | ||||
ion&); | ||||
private: | ||||
static LogString formatMessage(log4cxx_status_t stat) | ||||
; | ||||
}; | ||||
class LOG4CXX_EXPORT IllegalMonitorStateException | ||||
: public Exception { | ||||
public: | ||||
IllegalMonitorStateException(const LogString& msg); | ||||
IllegalMonitorStateException(const IllegalMonitorStat | ||||
eException& msg); | ||||
IllegalMonitorStateException& operator=(const Illegal | ||||
MonitorStateException& msg); | ||||
}; | ||||
/** | ||||
Thrown when an application tries to create an instance of a | ||||
class using | ||||
the newInstance method in class Class, but the specified cl | ||||
ass object | ||||
cannot be instantiated because it is an interface or is an | ||||
abstract class. | ||||
*/ | ||||
class LOG4CXX_EXPORT InstantiationException : public Except | ||||
ion | ||||
{ | ||||
public: | ||||
InstantiationException(const LogString& msg); | ||||
InstantiationException(const InstantiationException | ||||
& msg); | ||||
InstantiationException& operator=(const Instantiati | ||||
onException& msg); | ||||
}; | ||||
/** | ||||
Thrown when an application tries to load in a class through | ||||
its | ||||
string name but no definition for the class with the specif | ||||
ied name | ||||
could be found. | ||||
*/ | ||||
class LOG4CXX_EXPORT ClassNotFoundException : public Except | ||||
ion | ||||
{ | ||||
public: | ||||
ClassNotFoundException(const LogString& className); | ||||
ClassNotFoundException(const ClassNotFoundException& ms | ||||
g); | ||||
ClassNotFoundException& operator=(const ClassNotFoundEx | ||||
ception& msg); | ||||
private: | ||||
static LogString formatMessage(const LogString& classNa | ||||
me); | ||||
}; | ||||
class NoSuchElementException : public Exception { | ||||
public: | ||||
NoSuchElementException(); | ||||
NoSuchElementException(const NoSuchElementException&) | ||||
; | ||||
NoSuchElementException& operator=(const NoSuchElement | ||||
Exception&); | ||||
}; | ||||
class IllegalStateException : public Exception { | ||||
public: | ||||
IllegalStateException(); | ||||
IllegalStateException(const IllegalStateException&); | ||||
IllegalStateException& operator=(const IllegalStateEx | ||||
ception&); | ||||
}; | ||||
/** Thrown to indicate that there is an error in the underl | ||||
ying | ||||
protocol, such as a TCP error. | ||||
*/ | ||||
class LOG4CXX_EXPORT SocketException : public IOException | ||||
{ | ||||
public: | ||||
SocketException(const LogString& msg); | ||||
SocketException(log4cxx_status_t status); | ||||
SocketException(const SocketException&); | ||||
SocketException& operator=(const SocketException&); | ||||
}; | ||||
/** Signals that an error occurred while attempting to conn | ||||
ect a socket | ||||
to a remote address and port. Typically, the connection was | ||||
refused | ||||
remotely (e.g., no process is listening on the remote addre | ||||
ss/port). | ||||
*/ | ||||
class LOG4CXX_EXPORT ConnectException : public SocketExcept | ||||
ion | ||||
{ | ||||
public: | ||||
ConnectException(log4cxx_status_t status); | ||||
ConnectException(const ConnectException& src); | ||||
ConnectException& operator=(const ConnectException&); | ||||
}; | ||||
class LOG4CXX_EXPORT ClosedChannelException : public Socket | ||||
Exception | ||||
{ | ||||
public: | ||||
ClosedChannelException(); | ||||
ClosedChannelException(const ClosedChannelException& sr | ||||
c); | ||||
ClosedChannelException& operator=(const ClosedChannelEx | ||||
ception&); | ||||
}; | ||||
/** Signals that an error occurred while attempting to bind | ||||
a socket to | ||||
a local address and port. Typically, the port is in use, or | ||||
the | ||||
requested local address could not be assigned. | ||||
*/ | ||||
class LOG4CXX_EXPORT BindException : public SocketException | ||||
{ | ||||
public: | ||||
BindException(log4cxx_status_t status); | ||||
BindException(const BindException&); | ||||
BindException& operator=(const BindException&); | ||||
}; | ||||
/** Signals that an I/O operation has been interrupted. An | ||||
InterruptedIOException is thrown to indicate that an input | ||||
or output | ||||
transfer has been terminated because the thread performing | ||||
it was | ||||
interrupted. The field bytesTransferred indicates how many | ||||
bytes were | ||||
successfully transferred before the interruption occurred. | ||||
*/ | ||||
class LOG4CXX_EXPORT InterruptedIOException : public IOExce | ||||
ption | ||||
{ | ||||
public: | ||||
InterruptedIOException(const LogString& msg); | ||||
InterruptedIOException(const InterruptedIOException&); | ||||
InterruptedIOException& operator=(const InterruptedIOE | ||||
xception&); | ||||
}; | ||||
/** Signals that an I/O operation has been interrupted. An | ||||
InterruptedIOException is thrown to indicate that an input | ||||
or output | ||||
transfer has been terminated because the thread performing | ||||
it was | ||||
interrupted. The field bytesTransferred indicates how many | ||||
bytes were | ||||
successfully transferred before the interruption occurred. | ||||
*/ | ||||
class LOG4CXX_EXPORT SocketTimeoutException : public Interr | ||||
uptedIOException | ||||
{ | ||||
public: | ||||
SocketTimeoutException(); | ||||
SocketTimeoutException(const SocketTimeoutException&); | ||||
SocketTimeoutException& operator=(const SocketTimeoutE | ||||
xception&); | ||||
}; | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_EXCEPTION_H | #endif // _LOG4CXX_HELPERS_EXCEPTION_H | |||
End of changes. 9 change blocks. | ||||
66 lines changed or deleted | 320 lines changed or added | |||
fallbackerrorhandler.h | fallbackerrorhandler.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
skipping to change at line 28 | skipping to change at line 29 | |||
#define _LOG4CXX_VARIA_FALLBACK_ERROR_HANDLER_H | #define _LOG4CXX_VARIA_FALLBACK_ERROR_HANDLER_H | |||
#include <log4cxx/spi/errorhandler.h> | #include <log4cxx/spi/errorhandler.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/appender.h> | #include <log4cxx/appender.h> | |||
#include <log4cxx/logger.h> | #include <log4cxx/logger.h> | |||
#include <vector> | #include <vector> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace varia | namespace varia | |||
{ | { | |||
/** | /** | |||
The <code>FallbackErrorHandler</code> implements the ErrorHa | The <code>FallbackErrorHandler</code> implements the ErrorH | |||
ndler | andler | |||
interface such that a secondary appender may be specified. | interface such that a secondary appender may be specified. | |||
This | This | |||
secondary appender takes over if the primary appender fails | secondary appender takes over if the primary appender fails | |||
for | for | |||
whatever reason. | whatever reason. | |||
<p>The error message is printed on <code>System.err</code>, | <p>The error message is printed on <code>System.err</code>, | |||
and | and | |||
logged in the new secondary appender. | logged in the new secondary appender. | |||
*/ | */ | |||
class LOG4CXX_EXPORT FallbackErrorHandler : | class LOG4CXX_EXPORT FallbackErrorHandler : | |||
public virtual spi::ErrorHandler, | public virtual spi::ErrorHandler, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
private: | private: | |||
AppenderPtr backup; | AppenderPtr backup; | |||
AppenderPtr primary; | AppenderPtr primary; | |||
std::vector<LoggerPtr> loggers; | std::vector<LoggerPtr> loggers; | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(FallbackErrorHandler) | DECLARE_LOG4CXX_OBJECT(FallbackErrorHandler) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | LOG4CXX_CAST_ENTRY(spi::OptionHandler) | |||
LOG4CXX_CAST_ENTRY(spi::ErrorHandler) | LOG4CXX_CAST_ENTRY(spi::ErrorHandler) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
FallbackErrorHandler(); | FallbackErrorHandler(); | |||
void addRef() const; | ||||
void releaseRef() const; | ||||
/** | /** | |||
<em>Adds</em> the logger passed as parameter to the | <em>Adds</em> the logger passed as parameter to the | |||
list of | list of | |||
loggers that we need to search for in case of append | loggers that we need to search for in case of appen | |||
er failure. | der failure. | |||
*/ | */ | |||
void setLogger(const LoggerPtr& logger); | void setLogger(const LoggerPtr& logger); | |||
/** | /** | |||
No options to activate. | No options to activate. | |||
*/ | */ | |||
void activateOptions(); | void activateOptions(log4cxx::helpers::Pool& p); | |||
void setOption(const String& name, const String& value); | void setOption(const LogString& option, const LogSt | |||
ring& value); | ||||
/** | /** | |||
Prints the message and the stack trace of the except | Prints the message and the stack trace of the excep | |||
ion on | tion on | |||
<code>System.err</code>. | <code>System.err</code>. | |||
*/ | */ | |||
void error(const String& message, helpers::Exception | void error(const LogString& message, const std::exc | |||
& e, | eption& e, | |||
int errorCode) const; | int errorCode) const; | |||
/** | /** | |||
Prints the message and the stack trace of the except | Prints the message and the stack trace of the excep | |||
ion on | tion on | |||
<code>System.err</code>. | <code>System.err</code>. | |||
*/ | */ | |||
void error(const String& message, helpers::Exception | void error(const LogString& message, const std::exc | |||
& e, | eption& e, | |||
int errorCode, const spi::LoggingEventPtr& e | int errorCode, const spi::LoggingEventPtr& | |||
vent) const; | event) const; | |||
/** | /** | |||
Print a the error message passed as parameter on | Print a the error message passed as parameter on | |||
<code>System.err</code>. | <code>System.err</code>. | |||
*/ | */ | |||
void error(const String& message) const {} | void error(const LogString& /* message */) const {} | |||
/** | /** | |||
Return the backup appender. | Return the backup appender. | |||
*/ | */ | |||
const AppenderPtr& getBackupAppender() const | const AppenderPtr& getBackupAppender() const | |||
{ return backup; } | { return backup; } | |||
/** | /** | |||
The appender to which this error handler is attached | The appender to which this error handler is attache | |||
. | d. | |||
*/ | */ | |||
void setAppender(const AppenderPtr& primary); | void setAppender(const AppenderPtr& primary); | |||
/** | /** | |||
Set the backup appender. | Set the backup appender. | |||
*/ | */ | |||
void setBackupAppender(const AppenderPtr& backup); | void setBackupAppender(const AppenderPtr& backup); | |||
}; | }; | |||
} // namespace varia | } // namespace varia | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_VARIA_FALLBACK_ERROR_HANDLER_H | #endif //_LOG4CXX_VARIA_FALLBACK_ERROR_HANDLER_H | |||
End of changes. 13 change blocks. | ||||
85 lines changed or deleted | 89 lines changed or added | |||
fileappender.h | fileappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_FILE_APPENDER_H | #ifndef _LOG4CXX_FILE_APPENDER_H | |||
#define _LOG4CXX_FILE_APPENDER_H | #define _LOG4CXX_FILE_APPENDER_H | |||
#include <log4cxx/config.h> | #include <log4cxx/logger.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/writerappender.h> | #include <log4cxx/writerappender.h> | |||
#include <fstream> | #include <log4cxx/file.h> | |||
#include <log4cxx/helpers/pool.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class FileAppender; | namespace helpers { | |||
typedef helpers::ObjectPtrT<FileAppender> FileAppenderPtr; | class Pool; | |||
} | ||||
/** | /** | |||
* FileAppender appends log events to a file. | * FileAppender appends log events to a file. | |||
* | * | |||
* <p>Support for <code>java.io.Writer</code> and console appending | * <p>Support for <code>java.io.Writer</code> and console appending | |||
* has been deprecated and then removed. See the replacement | * has been deprecated and then removed. See the replacement | |||
* solutions: WriterAppender and ConsoleAppender. | * solutions: WriterAppender and ConsoleAppender. | |||
*/ | */ | |||
class LOG4CXX_EXPORT FileAppender : public WriterAppender | class LOG4CXX_EXPORT FileAppender : public WriterAppender | |||
{ | { | |||
protected: | protected: | |||
/** Append to or truncate the file? The default value for th | /** Append to or truncate the file? The default value for t | |||
is | his | |||
variable is <code>true</code>, meaning that by default a | variable is <code>true</code>, meaning that by default a | |||
<code>FileAppender</code> will append to an existing file an | <code>FileAppender</code> will append to an existing file a | |||
d | nd | |||
not truncate it. | not truncate it. | |||
<p>This option is meaningful only if the FileAppender opens | <p>This option is meaningful only if the FileAppender opens | |||
the | the | |||
file. | file. | |||
*/ | */ | |||
bool fileAppend; | bool fileAppend; | |||
/** | /** | |||
The name of the log file. */ | The name of the log file. */ | |||
String fileName; | LogString fileName; | |||
/** | /** | |||
Do we do bufferedIO? */ | Do we do bufferedIO? */ | |||
bool bufferedIO; | bool bufferedIO; | |||
/** | /** | |||
How big should the IO buffer be? Default is 8K. */ | How big should the IO buffer be? Default is 8K. */ | |||
int bufferSize; | int bufferSize; | |||
#ifdef UNICODE | public: | |||
std::wofstream ofs; | DECLARE_LOG4CXX_OBJECT(FileAppender) | |||
#else | BEGIN_LOG4CXX_CAST_MAP() | |||
std::ofstream ofs; | LOG4CXX_CAST_ENTRY(FileAppender) | |||
#endif | LOG4CXX_CAST_ENTRY_CHAIN(WriterAppender) | |||
END_LOG4CXX_CAST_MAP() | ||||
public: | /** | |||
DECLARE_LOG4CXX_OBJECT(FileAppender) | The default constructor does not do anything. | |||
BEGIN_LOG4CXX_CAST_MAP() | */ | |||
LOG4CXX_CAST_ENTRY(FileAppender) | FileAppender(); | |||
LOG4CXX_CAST_ENTRY_CHAIN(WriterAppender) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | /** | |||
The default constructor does not do anything. | Instantiate a <code>FileAppender</code> and open the file | |||
*/ | designated by <code>filename</code>. The opened filename wi | |||
FileAppender(); | ll | |||
become the output destination for this appender. | ||||
/** | <p>If the <code>append</code> parameter is true, the file w | |||
Instantiate a <code>FileAppender</code> and open the file | ill be | |||
designated by <code>filename</code>. The opened filename wil | appended to. Otherwise, the file designated by | |||
l | <code>filename</code> will be truncated before being opened | |||
become the output destination for this appender. | . | |||
<p>If the <code>append</code> parameter is true, the file wi | <p>If the <code>bufferedIO</code> parameter is <code>true</ | |||
ll be | code>, | |||
appended to. Otherwise, the file designated by | then buffered IO will be used to write to the output file. | |||
<code>filename</code> will be truncated before being opened. | ||||
<p>If the <code>bufferedIO</code> parameter is <code>true</c | */ | |||
ode>, | FileAppender(const LayoutPtr& layout, const LogString& file | |||
then buffered IO will be used to write to the output file. | name, bool append, | |||
bool bufferedIO, int bufferSize); | ||||
*/ | /** | |||
FileAppender(const LayoutPtr& layout, const String& filename | Instantiate a FileAppender and open the file designated by | |||
, bool append, | <code>filename</code>. The opened filename will become the | |||
bool bufferedIO, int bufferSize); | output | |||
destination for this appender. | ||||
/** | <p>If the <code>append</code> parameter is true, the file w | |||
Instantiate a FileAppender and open the file designated by | ill be | |||
<code>filename</code>. The opened filename will become the o | appended to. Otherwise, the file designated by | |||
utput | <code>filename</code> will be truncated before being opened | |||
destination for this appender. | . | |||
*/ | ||||
FileAppender(const LayoutPtr& layout, const LogString& file | ||||
name, bool append); | ||||
<p>If the <code>append</code> parameter is true, the file wi | /** | |||
ll be | Instantiate a FileAppender and open the file designated by | |||
appended to. Otherwise, the file designated by | <code>filename</code>. The opened filename will become the | |||
<code>filename</code> will be truncated before being opened. | output | |||
*/ | destination for this appender. | |||
FileAppender(const LayoutPtr& layout, const String& filename | ||||
, bool append); | ||||
/** | <p>The file will be appended to. */ | |||
Instantiate a FileAppender and open the file designated by | FileAppender(const LayoutPtr& layout, const LogString& file | |||
<code>filename</code>. The opened filename will become the o | name); | |||
utput | ||||
destination for this appender. | ||||
<p>The file will be appended to. */ | ~FileAppender(); | |||
FileAppender(const LayoutPtr& layout, const String& filename | ||||
); | ||||
~FileAppender(); | /** | |||
The <b>File</b> property takes a string value which should | ||||
be the | ||||
name of the file to append to. | ||||
/** | <p><b>Note that the special values | |||
The <b>File</b> property takes a string value which should b | "System.out" or "System.err" are no longer honored.</b> | |||
e the | ||||
name of the file to append to. | ||||
<p><b>Note that the special values | <p>Note: Actual opening of the file is made when | |||
"System.out" or "System.err" are no longer honored.</b> | #activateOptions is called, not when the options are set. | |||
*/ | ||||
virtual void setFile(const LogString& file); | ||||
<p>Note: Actual opening of the file is made when | /** | |||
#activateOptions is called, not when the options are set. * | Sets and <i>opens</i> the file where the log output will | |||
/ | go. The specified file must be writable. | |||
void setFile(const String& file); | ||||
/** | <p>If there was already an opened file, then the previous f | |||
Sets and <i>opens</i> the file where the log output will | ile | |||
go. The specified file must be writable. | is closed first. | |||
<p>If there was already an opened file, then the previous fi | <p><b>Do not use this method directly. To configure a FileA | |||
le | ppender | |||
is closed first. | or one of its subclasses, set its properties one by one and | |||
then | ||||
call activateOptions.</b> | ||||
<p><b>Do not use this method directly. To configure a FileAp | @param file The path to the log file. | |||
pender | @param append If true will append to fileName. Otherwise wi | |||
or one of its subclasses, set its properties one by one and | ll | |||
then | truncate fileName. | |||
call activateOptions.</b> | @param bufferedIO Do we do bufferedIO? | |||
@param bufferSize How big should the IO buffer be? | ||||
@param p memory pool for operation. | ||||
*/ | ||||
virtual void setFile(const LogString& file, bool append, | ||||
bool bufferedIO, size_t bufferSize, | ||||
log4cxx::helpers::Pool& p); | ||||
@param file The path to the log file. | /** | |||
@param append If true will append to fileName. Otherwise wil | Returns the value of the <b>Append</b> option. | |||
l | */ | |||
truncate fileName. | inline bool getAppend() const { return fileAppend; } | |||
@param bufferedIO Do we do bufferedIO? | ||||
@param bufferSize How big should the IO buffer be? | ||||
*/ | ||||
void setFile(const String& file, bool append, | ||||
bool bufferedIO, int bufferSize); | ||||
/** | /** Returns the value of the <b>File</b> option. */ | |||
Returns the value of the <b>Append</b> option. | inline LogString getFile() const { return fileName; } | |||
*/ | ||||
inline bool getAppend() const { return fileAppend; } | ||||
/** Returns the value of the <b>File</b> option. */ | /** | |||
inline const String& getFile() const { return fileName; } | <p>Sets and <i>opens</i> the file where the log output will | |||
go. The specified file must be writable. | ||||
/** | <p>If there was already an opened file, then the previous f | |||
<p>Sets and <i>opens</i> the file where the log output will | ile | |||
go. The specified file must be writable. | is closed first.*/ | |||
void activateOptions(log4cxx::helpers::Pool& p); | ||||
void setOption(const LogString& option, | ||||
const LogString& value); | ||||
<p>If there was already an opened file, then the previous file | /** | |||
is closed first.*/ | Get the value of the <b>BufferedIO</b> option. | |||
void activateOptions(); | ||||
void setOption(const String& option, | ||||
const String& value); | ||||
protected: | <p>BufferedIO will significatnly increase performance on he | |||
/** | avily | |||
Closes the previously opened file. | loaded systems. | |||
*/ | ||||
virtual void closeWriter(); | ||||
/** | */ | |||
Closes the previously opened file. | inline bool getBufferedIO() const { return bufferedIO; } | |||
*/ | ||||
void closeFile(); | ||||
public: | /** | |||
/** | Get the size of the IO buffer. | |||
Get the value of the <b>BufferedIO</b> option. | */ | |||
inline int getBufferSize() const { return bufferSize; } | ||||
<p>BufferedIO will significatnly increase performance on heavily | /** | |||
loaded systems. | The <b>Append</b> option takes a boolean value. It is set t | |||
o | ||||
<code>true</code> by default. If true, then <code>File</cod | ||||
e> | ||||
will be opened in append mode by #setFile (see | ||||
above). Otherwise, setFile will open | ||||
<code>File</code> in truncate mode. | ||||
*/ | <p>Note: Actual opening of the file is made when | |||
inline bool getBufferedIO() const { return bufferedIO; } | #activateOptions is called, not when the options are set. | |||
*/ | ||||
void setAppend(bool fileAppend1); | ||||
/** | /** | |||
Get the size of the IO buffer. | The <b>BufferedIO</b> option takes a boolean value. It is s | |||
*/ | et to | |||
inline int getBufferSize() const { return bufferSize; } | <code>false</code> by default. If true, then <code>File</co | |||
de> | ||||
will be opened in buffered mode. | ||||
/** | BufferedIO will significantly increase performance on heavi | |||
The <b>Append</b> option takes a boolean value. It is set to | ly | |||
<code>true</code> by default. If true, then <code>File</code> | loaded systems. | |||
will be opened in append mode by #setFile (see | ||||
above). Otherwise, setFile will open | ||||
<code>File</code> in truncate mode. | ||||
<p>Note: Actual opening of the file is made when | */ | |||
#activateOptions is called, not when the options are set. | void setBufferedIO(bool bufferedIO); | |||
*/ | ||||
inline void setAppend(bool fileAppend) | ||||
{ this->fileAppend = fileAppend; } | ||||
/** | ||||
The <b>BufferedIO</b> option takes a boolean value. It is set to | ||||
<code>false</code> by default. If true, then <code>File</code> | ||||
will be opened in buffered mode. | ||||
BufferedIO will significantly increase performance on heavily | /** | |||
loaded systems. | Set the size of the IO buffer. | |||
*/ | ||||
void setBufferSize(int bufferSize1) { this->bufferSize = bu | ||||
fferSize1; } | ||||
*/ | /** | |||
void setBufferedIO(bool bufferedIO); | * Replaces double backslashes with single backslashes | |||
* for compatibility with paths from earlier XML configur | ||||
ations files. | ||||
* @param name file name | ||||
* @return corrected file name | ||||
*/ | ||||
static LogString stripDuplicateBackslashes(const LogString& | ||||
name); | ||||
/** | private: | |||
Set the size of the IO buffer. | FileAppender(const FileAppender&); | |||
*/ | FileAppender& operator=(const FileAppender&); | |||
void setBufferSize(int bufferSize) { this->bufferSize = bufferSize; | ||||
} | }; // class FileAppender | |||
LOG4CXX_PTR_DEF(FileAppender); | ||||
}; // class FileAppender | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#endif | #endif | |||
End of changes. 43 change blocks. | ||||
181 lines changed or deleted | 193 lines changed or added | |||
filewatchdog.h | filewatchdog.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_FILEWATCHDOG_H | #ifndef _LOG4CXX_HELPERS_FILEWATCHDOG_H | |||
#define _LOG4CXX_HELPERS_FILEWATCHDOG_H | #define _LOG4CXX_HELPERS_FILEWATCHDOG_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/thread.h> | ||||
#include <time.h> | #include <time.h> | |||
#include <log4cxx/helpers/pool.h> | ||||
#include <log4cxx/helpers/thread.h> | ||||
#include <log4cxx/file.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Check every now and then that a certain file has not changed | Check every now and then that a certain file has not change | |||
. If it | d. If it | |||
has, then call the #doOnChange method. | has, then call the #doOnChange method. | |||
*/ | */ | |||
class LOG4CXX_EXPORT FileWatchdog : public Thread | class LOG4CXX_EXPORT FileWatchdog | |||
{ | { | |||
public: | public: | |||
/** | virtual ~FileWatchdog(); | |||
The default delay between every file modification ch | /** | |||
eck, set to 60 | The default delay between every file modification c | |||
seconds. */ | heck, set to 60 | |||
static long DEFAULT_DELAY /*= 60000*/; | seconds. */ | |||
static long DEFAULT_DELAY /*= 60000*/; | ||||
protected: | protected: | |||
/** | /** | |||
The name of the file to observe for changes. | The name of the file to observe for changes. | |||
*/ | */ | |||
String filename; | File file; | |||
/** | /** | |||
The delay to observe between every check. | The delay to observe between every check. | |||
By default set DEFAULT_DELAY.*/ | By default set DEFAULT_DELAY.*/ | |||
long delay; | long delay; | |||
time_t lastModif; | log4cxx_time_t lastModif; | |||
bool warnedAlready; | bool warnedAlready; | |||
bool interrupted; | volatile unsigned int interrupted; | |||
protected: | protected: | |||
FileWatchdog(const String& filename); | FileWatchdog(const File& filename); | |||
virtual void doOnChange() = 0; | virtual void doOnChange() = 0; | |||
void checkAndConfigure(); | void checkAndConfigure(); | |||
public: | public: | |||
/** | /** | |||
Set the delay to observe between each check of the f | Set the delay to observe between each check of the | |||
ile changes. | file changes. | |||
*/ | */ | |||
void setDelay(long delay) | void setDelay(long delay1) | |||
{ this->delay = delay; } | { this->delay = delay1; } | |||
void run(); | void start(); | |||
void start(); | ||||
}; | private: | |||
} // namespace helpers | static void* LOG4CXX_THREAD_FUNC run(apr_thread_t* thre | |||
}; // namespace log4cxx | ad, void* data); | |||
Pool pool; | ||||
Thread thread; | ||||
FileWatchdog(const FileWatchdog&); | ||||
FileWatchdog& operator=(const FileWatchdog&); | ||||
}; | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_FILEWATCHDOG_H | #endif // _LOG4CXX_HELPERS_FILEWATCHDOG_H | |||
End of changes. 10 change blocks. | ||||
50 lines changed or deleted | 63 lines changed or added | |||
filter.h | filter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_FILTER_H | #ifndef _LOG4CXX_SPI_FILTER_H | |||
#define _LOG4CXX_SPI_FILTER_H | #define _LOG4CXX_SPI_FILTER_H | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/spi/optionhandler.h> | #include <log4cxx/spi/optionhandler.h> | |||
#include <log4cxx/spi/loggingevent.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class Filter; | class Filter; | |||
typedef helpers::ObjectPtrT<Filter> FilterPtr; | LOG4CXX_PTR_DEF(Filter); | |||
class LoggingEvent; | ||||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | ||||
/** | /** | |||
Users should extend this class to implement customized logging | Users should extend this class to implement customized logging | |||
event filtering. Note that Logger and | event filtering. Note that Logger and | |||
AppenderSkeleton, the parent class of all standard | AppenderSkeleton, the parent class of all standard | |||
appenders, have built-in filtering rules. It is suggested that you | appenders, have built-in filtering rules. It is suggested that you | |||
first use and understand the built-in rules before rushing to write | first use and understand the built-in rules before rushing to write | |||
your own custom filters. | your own custom filters. | |||
<p>This abstract class assumes and also imposes that filters be | <p>This abstract class assumes and also imposes that filters be | |||
skipping to change at line 69 | skipping to change at line 68 | |||
<p>If the value #ACCEPT is returned, then the log | <p>If the value #ACCEPT is returned, then the log | |||
event is logged without consulting the remaining filters. | event is logged without consulting the remaining filters. | |||
<p>The philosophy of log4cxx filters is largely inspired from the | <p>The philosophy of log4cxx filters is largely inspired from the | |||
Linux ipchains. | Linux ipchains. | |||
<p>Note that filtering is only supported by the {@link | <p>Note that filtering is only supported by the {@link | |||
xml::DOMConfigurator DOMConfigurator}. | xml::DOMConfigurator DOMConfigurator}. | |||
*/ | */ | |||
class LOG4CXX_EXPORT Filter : public virtual OptionHandler, | class LOG4CXX_EXPORT Filter : public virtual OptionHandler, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
public: | /** | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Filter) | Points to the next filter in the filter chain. | |||
BEGIN_LOG4CXX_CAST_MAP() | */ | |||
LOG4CXX_CAST_ENTRY(Filter) | FilterPtr next; | |||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | public: | |||
END_LOG4CXX_CAST_MAP() | Filter(); | |||
/** | ||||
Points to the next filter in the filter chain. | void addRef() const; | |||
*/ | void releaseRef() const; | |||
FilterPtr next; | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Filter) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Filter) | ||||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | ||||
END_LOG4CXX_CAST_MAP() | ||||
log4cxx::spi::FilterPtr getNext() const; | ||||
void setNext(const log4cxx::spi::FilterPtr& newNext | ||||
); | ||||
enum FilterDecision | enum FilterDecision | |||
{ | { | |||
/** | /** | |||
The log event must be dropped immediately without consulting | The log event must be dropped immediately without consulting | |||
with the remaining filters, if any, in the chain. * | with the remaining filters, if any, in the chain. | |||
/ | */ | |||
DENY = -1, | DENY = -1, | |||
/** | /** | |||
This filter is neutral with respect to the log event. The | This filter is neutral with respect to the log event. The | |||
remaining filters, if any, should be consulted for a final deci sion. | remaining filters, if any, should be consulted for a final deci sion. | |||
*/ | */ | |||
NEUTRAL = 0, | NEUTRAL = 0, | |||
/** | /** | |||
The log event must be logged immediately without consulting wit h | The log event must be logged immediately without consulting wit h | |||
the remaining filters, if any, in the chain. | the remaining filters, if any, in the chain. | |||
*/ | */ | |||
ACCEPT = 1 | ACCEPT = 1 | |||
}; | }; | |||
/** | /** | |||
Usually filters options become active when set. We provide a | Usually filters options become active when set. We provide a | |||
default do-nothing implementation for convenience. | default do-nothing implementation for convenience. | |||
*/ | */ | |||
void activateOptions() {} | void activateOptions(log4cxx::helpers::Pool& p); | |||
void setOption(const String& option, const String& value) {} | void setOption(const LogString& option, const LogString& value) | |||
; | ||||
/** | /** | |||
<p>If the decision is <code>DENY</code>, then the event will be | <p>If the decision is <code>DENY</code>, then the event will be | |||
dropped. If the decision is <code>NEUTRAL</code>, then the next | dropped. If the decision is <code>NEUTRAL</code>, then the next | |||
filter, if any, will be invoked. If the decision is ACCEPT then | filter, if any, will be invoked. If the decision is ACCEPT then | |||
the event will be logged without consulting with other filters in | the event will be logged without consulting with other filters in | |||
the chain. | the chain. | |||
@param event The LoggingEvent to decide upon. | @param event The LoggingEvent to decide upon. | |||
@return The decision of the filter. */ | @return The decision of the filter. */ | |||
virtual FilterDecision decide(const LoggingEventPtr& event) con st = 0; | virtual FilterDecision decide(const LoggingEventPtr& event) con st = 0; | |||
}; | }; | |||
} | } | |||
} | } | |||
#endif //_LOG4CXX_SPI_FILTER_H | #endif //_LOG4CXX_SPI_FILTER_H | |||
End of changes. 10 change blocks. | ||||
36 lines changed or deleted | 45 lines changed or added | |||
formattinginfo.h | formattinginfo.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_FORMATTING_INFO_H | #ifndef _LOG4CXX_HELPER_FORMATTING_INFO_H | |||
#define _LOG4CXX_HELPER_FORMATTING_INFO_H | #define _LOG4CXX_HELPER_FORMATTING_INFO_H | |||
#include <log4cxx/config.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/logstring.h> | ||||
namespace log4cxx | namespace log4cxx { | |||
{ | namespace pattern { | |||
namespace helpers | ||||
{ | ||||
/** | ||||
FormattingInfo instances contain the information obtained wh | ||||
en parsing | ||||
formatting modifiers in conversion modifiers. | ||||
*/ | ||||
class LOG4CXX_EXPORT FormattingInfo | ||||
{ | ||||
public: | ||||
int minChar; | class FormattingInfo; | |||
int maxChar; | typedef helpers::ObjectPtrT<FormattingInfo> FormattingInfoPtr; | |||
bool leftAlign; | ||||
FormattingInfo(); | /** | |||
void reset(); | * Modifies the output of a pattern converter for a specified minimum | |||
void dump(); | * and maximum width and alignment. | |||
* | ||||
* | ||||
* | ||||
* | ||||
*/ | ||||
class LOG4CXX_EXPORT FormattingInfo : public virtual log4cxx::helpers::Obje | ||||
ctImpl { | ||||
}; // class FormattingInfo | /** | |||
} // namespace helpers | * Minimum length. | |||
}; // namespace log4cxx | */ | |||
const int minLength; | ||||
#endif // _LOG4CXX_HELPER_FORMATTING_INFO_H | /** | |||
* Maximum length. | ||||
*/ | ||||
const int maxLength; | ||||
/** | ||||
* Alignment. | ||||
*/ | ||||
const bool leftAlign; | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(FormattingInfo) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(FormattingInfo) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | ||||
* Creates new instance. | ||||
* @param leftAlign left align if true. | ||||
* @param minLength minimum length. | ||||
* @param maxLength maximum length. | ||||
*/ | ||||
FormattingInfo( | ||||
const bool leftAlign, const int minLength, const int maxLength); | ||||
/** | ||||
* Gets default instance. | ||||
* @return default instance. | ||||
*/ | ||||
static FormattingInfoPtr getDefault(); | ||||
/** | ||||
* Determine if left aligned. | ||||
* @return true if left aligned. | ||||
*/ | ||||
inline bool isLeftAligned() const { | ||||
return leftAlign; | ||||
} | ||||
/** | ||||
* Get minimum length. | ||||
* @return minimum length. | ||||
*/ | ||||
inline int getMinLength() const { | ||||
return minLength; | ||||
} | ||||
/** | ||||
* Get maximum length. | ||||
* @return maximum length. | ||||
*/ | ||||
inline int getMaxLength() const { | ||||
return maxLength; | ||||
} | ||||
/** | ||||
* Adjust the content of the buffer based on the specified lengths and al | ||||
ignment. | ||||
* | ||||
* @param fieldStart start of field in buffer. | ||||
* @param buffer buffer to be modified. | ||||
*/ | ||||
void format(const int fieldStart, LogString& buffer) const; | ||||
}; | ||||
LOG4CXX_PTR_DEF(FormattingInfo); | ||||
} | ||||
} | ||||
#endif | ||||
End of changes. 7 change blocks. | ||||
27 lines changed or deleted | 26 lines changed or added | |||
hierarchy.h | hierarchy.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HIERARCHY_H | #ifndef _LOG4CXX_HIERARCHY_H | |||
#define _LOG4CXX_HIERARCHY_H | #define _LOG4CXX_HIERARCHY_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning (push) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/loggerrepository.h> | #include <log4cxx/spi/loggerrepository.h> | |||
#include <log4cxx/spi/loggerfactory.h> | #include <log4cxx/spi/loggerfactory.h> | |||
#include <vector> | #include <vector> | |||
#include <map> | #include <map> | |||
#include <log4cxx/provisionnode.h> | #include <log4cxx/provisionnode.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/criticalsection.h> | ||||
#include <log4cxx/spi/hierarchyeventlistener.h> | #include <log4cxx/spi/hierarchyeventlistener.h> | |||
#include <log4cxx/helpers/pool.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | /** | |||
{ | This class is specialized in retrieving loggers by name and also | |||
class HierarchyEventListener; | maintaining the logger hierarchy. | |||
typedef log4cxx::helpers::ObjectPtrT<HierarchyEventListener> | ||||
HierarchyEventListenerPtr; | ||||
typedef std::vector<HierarchyEventListenerPtr> HierarchyEven | ||||
tListenerList; | ||||
} | ||||
/** | <p><em>The casual user does not have to deal with this class | |||
This class is specialized in retrieving loggers by name and also | directly.</em> | |||
maintaining the logger hierarchy. | ||||
<p><em>The casual user does not have to deal with this class | <p>The structure of the logger hierarchy is maintained by the | |||
directly.</em> | #getLogger method. The hierarchy is such that children link | |||
to their parent but parents do not have any pointers to their | ||||
children. Moreover, loggers can be instantiated in any order, in | ||||
particular descendant before ancestor. | ||||
<p>The structure of the logger hierarchy is maintained by the | <p>In case a descendant is created before a particular ancestor, | |||
#getLogger method. The hierarchy is such that children link | then it creates a provision node for the ancestor and adds itself | |||
to their parent but parents do not have any pointers to their | to the provision node. Other descendants of the same ancestor add | |||
children. Moreover, loggers can be instantiated in any order, in | themselves to the previously created provision node. | |||
particular descendant before ancestor. | */ | |||
class LOG4CXX_EXPORT Hierarchy : | ||||
public virtual spi::LoggerRepository, | ||||
public virtual helpers::ObjectImpl | ||||
{ | ||||
private: | ||||
log4cxx::helpers::Pool pool; | ||||
log4cxx::helpers::Mutex mutex; | ||||
bool configured; | ||||
<p>In case a descendant is created before a particular ancestor, | spi::LoggerFactoryPtr defaultFactory; | |||
then it creates a provision node for the ancestor and adds itself | spi::HierarchyEventListenerList listeners; | |||
to the provision node. Other descendants of the same ancestor add | ||||
themselves to the previously created provision node. | ||||
*/ | ||||
class LOG4CXX_EXPORT Hierarchy : | ||||
public virtual spi::LoggerRepository, | ||||
public virtual helpers::ObjectImpl | ||||
{ | ||||
private: | ||||
spi::LoggerFactoryPtr defaultFactory; | ||||
spi::HierarchyEventListenerList listeners; | ||||
typedef std::map<String, LoggerPtr> LoggerMap; | typedef std::map<LogString, LoggerPtr> LoggerMap; | |||
LoggerMap loggers; | LoggerMap* loggers; | |||
typedef std::map<String, ProvisionNode> ProvisionNodeMap; | typedef std::map<LogString, ProvisionNode> ProvisionNodeMap; | |||
ProvisionNodeMap provisionNodes; | ProvisionNodeMap* provisionNodes; | |||
LoggerPtr root; | LoggerPtr root; | |||
int thresholdInt; | int thresholdInt; | |||
LevelPtr threshold; | LevelPtr threshold; | |||
bool emittedNoAppenderWarning; | bool emittedNoAppenderWarning; | |||
bool emittedNoResourceBundleWarning; | bool emittedNoResourceBundleWarning; | |||
/** | public: | |||
Map synchronization | DECLARE_ABSTRACT_LOG4CXX_OBJECT(Hierarchy) | |||
*/ | BEGIN_LOG4CXX_CAST_MAP() | |||
mutable helpers::CriticalSection mapCs; | LOG4CXX_CAST_ENTRY(spi::LoggerRepository) | |||
END_LOG4CXX_CAST_MAP() | ||||
public: | /** | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Hierarchy) | Create a new logger hierarchy. | |||
BEGIN_LOG4CXX_CAST_MAP() | */ | |||
LOG4CXX_CAST_ENTRY(spi::LoggerRepository) | Hierarchy(); | |||
END_LOG4CXX_CAST_MAP() | ||||
/** | ~Hierarchy(); | |||
Create a new logger hierarchy. | ||||
@param root The root of the new hierarchy. | ||||
*/ | void addRef() const; | |||
Hierarchy(const LoggerPtr& root); | void releaseRef() const; | |||
~Hierarchy(); | void addHierarchyEventListener(const spi::HierarchyEventListene rPtr& listener); | |||
public: | /** | |||
void addHierarchyEventListener(const spi::HierarchyEventList | This call will clear all logger definitions from the internal | |||
enerPtr& listener); | hashtable. Invoking this method will irrevocably mess up the | |||
logger hierarchy. | ||||
/** | <p>You should <em>really</em> know what you are doing before | |||
This call will clear all logger definitions from the interna | invoking this method. | |||
l | */ | |||
hashtable. Invoking this method will irrevocably mess up the | void clear(); | |||
logger hierarchy. | ||||
<p>You should <em>really</em> know what you are doing before | void emitNoAppenderWarning(const LoggerPtr& logger); | |||
invoking this method. | ||||
*/ | ||||
public: | ||||
void clear(); | ||||
public: | /** | |||
void emitNoAppenderWarning(const LoggerPtr& logger); | Check if the named logger exists in the hierarchy. If so return | |||
its reference, otherwise returns <code>null</code>. | ||||
/** | @param name The name of the logger to search for. | |||
Check if the named logger exists in the hierarchy. If so ret | ||||
urn | ||||
its reference, otherwise returns <code>null</code>. | ||||
@param name The name of the logger to search for. | */ | |||
LoggerPtr exists(const LogString& name); | ||||
*/ | /** | |||
public: | The string form of {@link #setThreshold(const LevelPtr&) setThr | |||
LoggerPtr exists(const String& name); | eshold}. | |||
*/ | ||||
void setThreshold(const LogString& levelStr); | ||||
/** | /** | |||
The string form of {@link #setThreshold(const LevelPtr&) set | Enable logging for logging requests with level <code>l</code> o | |||
Threshold}. | r | |||
*/ | higher. By default all levels are enabled. | |||
public: | ||||
void setThreshold(const String& levelStr); | ||||
/** | @param l The minimum level for which logging requests a | |||
Enable logging for logging requests with level <code>l</code> or | re sent to | |||
higher. By default all levels are enabled. | their appenders. */ | |||
void setThreshold(const LevelPtr& l); | ||||
@param l The minimum level for which logging requests are se | void fireAddAppenderEvent(const LoggerPtr& logger, const Append | |||
nt to | erPtr& appender); | |||
their appenders. */ | ||||
public: | ||||
void setThreshold(const LevelPtr& l); | ||||
public: | void fireRemoveAppenderEvent(const LoggerPtr& logger, | |||
void fireAddAppenderEvent(const LoggerPtr& logger, const App | const AppenderPtr& appender); | |||
enderPtr& appender); | ||||
public: | /** | |||
void fireRemoveAppenderEvent(const LoggerPtr& logger, | Returns a Level representation of the <code>enable</code> | |||
const AppenderPtr& appender); | state. | |||
*/ | ||||
const LevelPtr& getThreshold() const; | ||||
/** | /** | |||
Returns a Level representation of the <code>enable</code> | Return a new logger instance named as the first parameter using | |||
state. | the default factory. | |||
*/ | ||||
public: | ||||
const LevelPtr& getThreshold() const; | ||||
/** | <p>If a logger of that name already exists, then it will be | |||
Return a new logger instance named as the first parameter us | returned. Otherwise, a new logger will be instantiated and | |||
ing | then linked with its existing ancestors as well as children. | |||
the default factory. | ||||
<p>If a logger of that name already exists, then it will be | @param name The name of the logger to retrieve. | |||
returned. Otherwise, a new logger will be instantiated and | ||||
then linked with its existing ancestors as well as children. | ||||
@param name The name of the logger to retrieve. | */ | |||
LoggerPtr getLogger(const LogString& name); | ||||
*/ | /** | |||
public: | Return a new logger instance named as the first parameter using | |||
LoggerPtr getLogger(const String& name); | <code>factory</code>. | |||
/** | <p>If a logger of that name already exists, then it will be | |||
Return a new logger instance named as the first parameter us | returned. Otherwise, a new logger will be instantiated by the | |||
ing | <code>factory</code> parameter and linked with its existing | |||
<code>factory</code>. | ancestors as well as children. | |||
<p>If a logger of that name already exists, then it will be | @param name The name of the logger to retrieve. | |||
returned. Otherwise, a new logger will be instantiated by t | @param factory The factory that will make the new logger instan | |||
he | ce. | |||
<code>factory</code> parameter and linked with its existing | ||||
ancestors as well as children. | ||||
@param name The name of the logger to retrieve. | */ | |||
@param factory The factory that will make the new logger ins | LoggerPtr getLogger(const LogString& name, | |||
tance. | const spi::LoggerFactoryPtr& factory); | |||
*/ | /** | |||
public: | Returns all the currently defined loggers in this hierarchy as | |||
LoggerPtr getLogger(const String& name, spi::LoggerFactoryPt | a LoggerList. | |||
r factory); | ||||
/** | <p>The root logger is <em>not</em> included in the returned | |||
Returns all the currently defined loggers in this hierarchy | LoggerList. */ | |||
as | LoggerList getCurrentLoggers() const; | |||
a LoggerList. | ||||
<p>The root logger is <em>not</em> included in the returned | /** | |||
LoggerList. */ | Get the root of this hierarchy. | |||
public: | */ | |||
LoggerList getCurrentLoggers() const; | LoggerPtr getRootLogger() const; | |||
/** | /** | |||
Get the root of this hierarchy. | This method will return <code>true</code> if this repository is | |||
*/ | disabled for <code>level</code> object passed as parameter and | |||
public: | <code>false</code> otherwise. See also the | |||
LoggerPtr getRootLogger() const; | {@link #setThreshold(const LevelPtr&) setThreshold} method. */ | |||
bool isDisabled(int level) const; | ||||
/** | /** | |||
This method will return <code>true</code> if this repository | Reset all values contained in this hierarchy instance to their | |||
is | default. This removes all appenders from all categories, sets | |||
disabled for <code>level</code> object passed as parameter a | the level of all non-root categories to <code>null</code>, | |||
nd | sets their additivity flag to <code>true</code> and sets the le | |||
<code>false</code> otherwise. See also the | vel | |||
{@link #setThreshold(const LevelPtr&) setThreshold} method. | of the root logger to DEBUG. Moreover, | |||
*/ | message disabling is set its default "off" value. | |||
public: | ||||
bool isDisabled(int level) const; | ||||
/** | <p>Existing categories are not removed. They are just reset. | |||
Reset all values contained in this hierarchy instance to the | ||||
ir | ||||
default. This removes all appenders from all categories, se | ||||
ts | ||||
the level of all non-root categories to <code>null</code>, | ||||
sets their additivity flag to <code>true</code> and sets the | ||||
level | ||||
of the root logger to {@link Level#DEBUG DEBUG}. Moreover, | ||||
message disabling is set its default "off" value. | ||||
<p>Existing categories are not removed. They are just reset. | <p>This method should be used sparingly and with care as it wil | |||
l | ||||
block all logging until it is completed.</p> | ||||
*/ | ||||
void resetConfiguration(); | ||||
<p>This method should be used sparingly and with care as it | /** | |||
will | Used by subclasses to add a renderer to the hierarchy passed as | |||
block all logging until it is completed.</p> | parameter. | |||
*/ | */ | |||
public: | /** | |||
void resetConfiguration(); | Shutting down a hierarchy will <em>safely</em> close and remove | |||
all appenders in all categories including the root logger. | ||||
/** | <p>Some appenders such as {@link net::SocketAppender SocketAppe | |||
Used by subclasses to add a renderer to the hierarchy passed | nder} | |||
as parameter. | and AsyncAppender need to be closed before the | |||
*/ | application exists. Otherwise, pending logging events might be | |||
public: | lost. | |||
/** | ||||
Shutting down a hierarchy will <em>safely</em> close and rem | ||||
ove | ||||
all appenders in all categories including the root logger. | ||||
<p>Some appenders such as {@link net::SocketAppender SocketA | <p>The <code>shutdown</code> method is careful to close nested | |||
ppender} | appenders before closing regular appenders. This is allows | |||
and AsyncAppender need to be closed before the | configurations where a regular appender is attached to a logger | |||
application exists. Otherwise, pending logging events might | and again to a nested appender. | |||
be | */ | |||
lost. | void shutdown(); | |||
<p>The <code>shutdown</code> method is careful to close nest | virtual bool isConfigured(); | |||
ed | virtual void setConfigured(bool configured); | |||
appenders before closing regular appenders. This is allows | ||||
configurations where a regular appender is attached to a log | ||||
ger | ||||
and again to a nested appender. | ||||
*/ | ||||
public: | ||||
void shutdown(); | private: | |||
/** | /** | |||
This method loops through all the *potential* parents of | This method loops through all the *potential* parents of | |||
'cat'. There 3 possible cases: | 'cat'. There 3 possible cases: | |||
1) No entry for the potential parent of 'cat' exists | 1) No entry for the potential parent of 'cat' exists | |||
We create a ProvisionNode for this potential parent and inse | We create a ProvisionNode for this potential parent and insert | |||
rt | 'cat' in that provision node. | |||
'cat' in that provision node. | ||||
2) There entry is of type Logger for the potential parent. | 2) There entry is of type Logger for the potential parent. | |||
The entry is 'cat's nearest existing parent. We update cat's | The entry is 'cat's nearest existing parent. We update cat's | |||
parent field with this entry. We also break from the loop | parent field with this entry. We also break from the loop | |||
because updating our parent's parent is our parent's | because updating our parent's parent is our parent's | |||
responsibility. | responsibility. | |||
3) There entry is of type ProvisionNode for this potential p arent. | 3) There entry is of type ProvisionNode for this potential pare nt. | |||
We add 'cat' to the list of children for this potential pare | We add 'cat' to the list of children for this potential parent. | |||
nt. | */ | |||
*/ | void updateParents(LoggerPtr logger); | |||
private: | ||||
void updateParents(LoggerPtr& logger); | ||||
/** | /** | |||
We update the links for all the children that placed themsel | We update the links for all the children that placed themselves | |||
ves | in the provision node 'pn'. The second argument 'cat' is a | |||
in the provision node 'pn'. The second argument 'cat' is a | reference for the newly created Logger, parent of all the | |||
reference for the newly created Logger, parent of all the | children in 'pn' | |||
children in 'pn' | ||||
We loop on all the children 'c' in 'pn': | We loop on all the children 'c' in 'pn': | |||
If the child 'c' has been already linked to a child of | If the child 'c' has been already linked to a child of | |||
'cat' then there is no need to update 'c'. | 'cat' then there is no need to update 'c'. | |||
Otherwise, we set cat's parent field to c's parent and set | Otherwise, we set cat's parent field to c's parent and set | |||
c's parent field to cat. | c's parent field to cat. | |||
*/ | */ | |||
private: | Hierarchy(const Hierarchy&); | |||
Hierarchy& operator=(const Hierarchy&); | ||||
void updateChildren(ProvisionNode& pn, LoggerPtr logger); | ||||
}; | ||||
void updateChildren(ProvisionNode& pn, LoggerPtr& logger); | ||||
}; | ||||
} //namespace log4cxx | } //namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif //_LOG4CXX_HIERARCHY_H | #endif //_LOG4CXX_HIERARCHY_H | |||
End of changes. 64 change blocks. | ||||
233 lines changed or deleted | 204 lines changed or added | |||
hierarchyeventlistener.h | hierarchyeventlistener.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | #ifndef _LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | |||
#define _LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | #define _LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <vector> | #include <vector> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | class Logger; | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | class Appender; | |||
class Appender; | ||||
typedef helpers::ObjectPtrT<Appender> AppenderPtr; | ||||
namespace spi | namespace spi | |||
{ | { | |||
class HierarchyEventListener; | ||||
typedef log4cxx::helpers::ObjectPtrT<HierarchyEventListener> | ||||
HierarchyEventListenerPtr; | ||||
typedef std::vector<HierarchyEventListenerPtr> HierarchyEven | ||||
tListenerList; | ||||
/** Listen to events occuring within a Hierarchy.*/ | /** Listen to events occuring within a Hierarchy.*/ | |||
class LOG4CXX_EXPORT HierarchyEventListener : | class LOG4CXX_EXPORT HierarchyEventListener : | |||
public virtual log4cxx::helpers::Object | public virtual log4cxx::helpers::Object | |||
{ | { | |||
public: | public: | |||
virtual ~HierarchyEventListener() {} | virtual ~HierarchyEventListener() {} | |||
virtual void addAppenderEvent(const LoggerPtr& logge | virtual void addAppenderEvent( | |||
r, const AppenderPtr& | const log4cxx::helpers::ObjectPtrT<Logger>& logger, | |||
appender) = 0; | const log4cxx::helpers::ObjectPtrT<Appender>& appender | |||
) = 0; | ||||
virtual void removeAppenderEvent(const LoggerPtr& lo | virtual void removeAppenderEvent( | |||
gger, | const log4cxx::helpers::ObjectPtrT<Logger>& logger, | |||
const AppenderPtr& appender) = 0; | const log4cxx::helpers::ObjectPtrT<Appender>& appender | |||
}; | ) = 0; | |||
} // namespace spi | }; | |||
}; // namespace log4cxx | LOG4CXX_PTR_DEF(HierarchyEventListener); | |||
LOG4CXX_LIST_DEF(HierarchyEventListenerList, HierarchyEvent | ||||
ListenerPtr); | ||||
} // namespace spi | ||||
} // namespace log4cxx | ||||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | #endif //_LOG4CXX_SPI_HIERARCHY_EVENT_LISTENER_H | |||
End of changes. 7 change blocks. | ||||
31 lines changed or deleted | 40 lines changed or added | |||
htmllayout.h | htmllayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HTML_LAYOUT_H | #ifndef _LOG4CXX_HTML_LAYOUT_H | |||
#define _LOG4CXX_HTML_LAYOUT_H | #define _LOG4CXX_HTML_LAYOUT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
#include <log4cxx/helpers/iso8601dateformat.h> | #include <log4cxx/helpers/iso8601dateformat.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class HTMLLayout; | /** | |||
typedef helpers::ObjectPtrT<HTMLLayout> HTMLLayoutPtr; | This layout outputs events in a HTML table. | |||
*/ | ||||
/** | class LOG4CXX_EXPORT HTMLLayout : public Layout | |||
This layout outputs events in a HTML table. | { | |||
*/ | private: | |||
class LOG4CXX_EXPORT HTMLLayout : public Layout | // Print no location info by default | |||
{ | bool locationInfo; //= false | |||
protected: | ||||
static String TRACE_PREFIX; | ||||
private: | ||||
/** | ||||
A string constant used in naming the option for setting the | ||||
the | ||||
location information flag. Current value of this string | ||||
constant is <b>LocationInfo</b>. | ||||
*/ | ||||
static String LOCATION_INFO_OPTION; | ||||
/** | ||||
A string constant used in naming the option for setting the | ||||
the | ||||
HTML document title. Current value of this string | ||||
constant is <b>Title</b>. | ||||
*/ | ||||
static String TITLE_OPTION; | ||||
// Print no location info by default | ||||
bool locationInfo; //= false | ||||
String title; | LogString title; | |||
helpers::ISO8601DateFormat dateFormat; | helpers::ISO8601DateFormat dateFormat; | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(HTMLLayout) | DECLARE_LOG4CXX_OBJECT(HTMLLayout) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(HTMLLayout) | LOG4CXX_CAST_ENTRY(HTMLLayout) | |||
LOG4CXX_CAST_ENTRY_CHAIN(Layout) | LOG4CXX_CAST_ENTRY_CHAIN(Layout) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
HTMLLayout(); | HTMLLayout(); | |||
/** | /** | |||
The <b>LocationInfo</b> option takes a boolean value. By | The <b>LocationInfo</b> option takes a boolean value. By | |||
default, it is set to false which means there will be no loc | default, it is set to false which means there will be no lo | |||
ation | cation | |||
information output by this layout. If the the option is set | information output by this layout. If the the option is set | |||
to | to | |||
true, then the file name and line number of the statement | true, then the file name and line number of the statement | |||
at the origin of the log statement will be output. | at the origin of the log statement will be output. | |||
<p>If you are embedding this layout within an | <p>If you are embedding this layout within an | |||
{@link net::SMTPAppender SMTPAppender} then make sure | {@link net::SMTPAppender SMTPAppender} then make sure | |||
to set the <b>LocationInfo</b> option of that appender as we | to set the <b>LocationInfo</b> option of that appender as w | |||
ll. | ell. | |||
*/ | */ | |||
inline void setLocationInfo(bool flocationInfoag) | inline void setLocationInfo(bool locationInfoFlag) | |||
{ this->locationInfo = locationInfo; } | { this->locationInfo = locationInfoFlag; } | |||
/** | /** | |||
Returns the current value of the <b>LocationInfo</b> option. | Returns the current value of the <b>LocationInfo</b> option | |||
*/ | . | |||
inline bool getLocationInfo() const | */ | |||
{ return locationInfo; } | inline bool getLocationInfo() const | |||
{ return locationInfo; } | ||||
/** | /** | |||
The <b>Title</b> option takes a String value. This option se | The <b>Title</b> option takes a String value. This option s | |||
ts the | ets the | |||
document title of the generated HTML document. | document title of the generated HTML document. | |||
<p>Defaults to 'Log4cxx Log Messages'. | <p>Defaults to 'Log4cxx Log Messages'. | |||
*/ | */ | |||
inline void setTitle(const String& title) | inline void setTitle(const LogString& title1) | |||
{ this->title = title; } | { this->title.assign(title1); } | |||
/** | /** | |||
Returns the current value of the <b>Title</b> option. | Returns the current value of the <b>Title</b> option. | |||
*/ | */ | |||
inline const String& getTitle() const | inline const LogString& getTitle() const | |||
{ return title; } | { return title; } | |||
/** | /** | |||
Returns the content type output by this layout, i.e "text/ht | Returns the content type output by this layout, i.e "text/h | |||
ml". | tml". | |||
*/ | */ | |||
virtual String getContentType() const { return _T("text/html | virtual LogString getContentType() const { return LOG4CXX_S | |||
"); } | TR("text/html"); } | |||
/** | /** | |||
No options to activate. | No options to activate. | |||
*/ | */ | |||
virtual void activateOptions() {} | virtual void activateOptions(log4cxx::helpers::Pool& /* p * | |||
/) {} | ||||
/** | /** | |||
Set options | Set options | |||
*/ | */ | |||
virtual void setOption(const String& option, const String& v | virtual void setOption(const LogString& option, const LogSt | |||
alue); | ring& value); | |||
virtual void format(ostream& output, const spi::LoggingEvent | virtual void format(LogString& output, | |||
Ptr& event) const; | const spi::LoggingEventPtr& event, log4cxx::helpers::P | |||
ool& pool) const; | ||||
/** | /** | |||
Append appropriate HTML headers. | Append appropriate HTML headers. | |||
*/ | */ | |||
virtual void appendHeader(ostream& output); | virtual void appendHeader(LogString& output, log4cxx::helpe | |||
rs::Pool& pool); | ||||
/** | /** | |||
Append the appropriate HTML footers. | Append the appropriate HTML footers. | |||
*/ | */ | |||
virtual void appendFooter(ostream& output); | virtual void appendFooter(LogString& output, log4cxx::helpe | |||
rs::Pool& pool); | ||||
/** | /** | |||
The HTML layout handles the throwable contained in logging | The HTML layout handles the throwable contained in logging | |||
events. Hence, this method return <code>false</code>. */ | events. Hence, this method return <code>false</code>. */ | |||
virtual bool ignoresThrowable() const | virtual bool ignoresThrowable() const | |||
{ return false; } | { return false; } | |||
}; // class HtmlLayout | }; // class HtmlLayout | |||
LOG4CXX_PTR_DEF(HTMLLayout); | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif // _LOG4CXX_HTML_LAYOUT_H | #endif // _LOG4CXX_HTML_LAYOUT_H | |||
End of changes. 21 change blocks. | ||||
108 lines changed or deleted | 102 lines changed or added | |||
inetaddress.h | inetaddress.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_INETADDRESS_H | #ifndef _LOG4CXX_HELPER_INETADDRESS_H | |||
#define _LOG4CXX_HELPER_INETADDRESS_H | #define _LOG4CXX_HELPER_INETADDRESS_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/logstring.h> | ||||
#include <vector> | #include <vector> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT UnknownHostException : public Exception | class LOG4CXX_EXPORT UnknownHostException : public Exceptio | |||
{ | n | |||
}; | { | |||
public: | ||||
UnknownHostException(const LogString& msg); | ||||
UnknownHostException(const UnknownHostException& src) | ||||
; | ||||
UnknownHostException& operator=(const UnknownHostExce | ||||
ption& src); | ||||
}; | ||||
class LOG4CXX_EXPORT InetAddress | class InetAddress; | |||
{ | LOG4CXX_PTR_DEF(InetAddress); | |||
public: | LOG4CXX_LIST_DEF(InetAddressList, InetAddressPtr); | |||
InetAddress(); | ||||
/** Returns the raw IP address of this InetAddress | class LOG4CXX_EXPORT InetAddress : public ObjectImpl | |||
object. | { | |||
*/ | public: | |||
int getAddress() const; | DECLARE_ABSTRACT_LOG4CXX_OBJECT(InetAddress) | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(InetAddress) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** Determines all the IP addresses of a host, given | InetAddress(const LogString& hostName, const LogStr | |||
the host's name. | ing& hostAddr); | |||
*/ | ||||
static std::vector<InetAddress> getAllByName(const S | ||||
tring& host); | ||||
/** Determines the IP address of a host, given the h | /** Determines all the IP addresses of a host, give | |||
ost's name. | n the host's name. | |||
*/ | */ | |||
static InetAddress getByName(const String& host); | static InetAddressList getAllByName(const LogString | |||
& host); | ||||
/** Returns the IP address string "%d.%d.%d.%d". | /** Determines the IP address of a host, given the | |||
*/ | host's name. | |||
String getHostAddress() const; | */ | |||
static InetAddressPtr getByName(const LogString& ho | ||||
st); | ||||
/** Gets the host name for this IP address. | /** Returns the IP address string "%d.%d.%d.%d". | |||
*/ | */ | |||
String getHostName() const; | LogString getHostAddress() const; | |||
/** Returns the local host. | /** Gets the host name for this IP address. | |||
*/ | */ | |||
static InetAddress getLocalHost(); | LogString getHostName() const; | |||
/** Utility routine to check if the InetAddress is a | /** Returns the local host. | |||
n IP multicast address. | */ | |||
*/ | static InetAddressPtr getLocalHost(); | |||
bool isMulticastAddress() const; | ||||
/** Converts this IP address to a String. | /** Returns an InetAddress which can be used as any | |||
*/ | * address, for example when listening on a port f | |||
String toString() const; | rom any | |||
* remote addresss. | ||||
*/ | ||||
static InetAddressPtr anyAddress(); | ||||
int address; | /** Converts this IP address to a String. | |||
}; // class InetAddress | */ | |||
} // namespace helpers | LogString toString() const; | |||
}; // namespace log4cxx | ||||
private: | ||||
LogString ipAddrString; | ||||
LogString hostNameString; | ||||
}; // class InetAddress | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif // _LOG4CXX_HELPER_INETADDRESS_H | #endif // _LOG4CXX_HELPER_INETADDRESS_H | |||
End of changes. 13 change blocks. | ||||
48 lines changed or deleted | 79 lines changed or added | |||
iso8601dateformat.h | iso8601dateformat.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | #ifndef _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | |||
#define _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | #define _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | |||
#include <log4cxx/helpers/dateformat.h> | #include <log4cxx/helpers/simpledateformat.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Formats a date in the format <b>\%Y-\%m-\%d \%H:\%M:\%S,\%Q< | Formats a date in the format <b>yyyy-MM-dd HH:mm:ss,SSS</b> | |||
/b> for example | for example | |||
"1999-11-27 15:49:37,459". | "1999-11-27 15:49:37,459". | |||
<p>Refer to the | <p>Refer to the | |||
<a href=http://www.cl.cam.ac.uk/~mgk25/iso-time.html>summary | <a href=http://www.cl.cam.ac.uk/~mgk25/iso-time.html>summar | |||
of the | y of the | |||
International Standard Date and Time Notation</a> for more | International Standard Date and Time Notation</a> for more | |||
information on this format. | information on this format. | |||
*/ | */ | |||
class LOG4CXX_EXPORT ISO8601DateFormat : public DateFormat | class LOG4CXX_EXPORT ISO8601DateFormat : public SimpleDateF | |||
{ | ormat | |||
public: | { | |||
ISO8601DateFormat(const TimeZonePtr& timeZone) | public: | |||
: DateFormat(_T("%Y-%m-%d %H:%M:%S,%Q"), timeZone) | ISO8601DateFormat() | |||
{} | : SimpleDateFormat(LOG4CXX_STR("yyyy-MM-dd HH:mm:s | |||
}; | s,SSS")) {} | |||
} // namespace helpers | }; | |||
}; // namespace log4cxx | } // namespace helpers | |||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | #endif // _LOG4CXX_HELPERS_ISO_8601_DATE_FORMAT_H | |||
End of changes. 4 change blocks. | ||||
27 lines changed or deleted | 29 lines changed or added | |||
layout.h | layout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_LAYOUT_H | #ifndef _LOG4CXX_LAYOUT_H | |||
#define _LOG4CXX_LAYOUT_H | #define _LOG4CXX_LAYOUT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/spi/optionhandler.h> | #include <log4cxx/spi/optionhandler.h> | |||
#include <log4cxx/spi/loggingevent.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Layout; | /** | |||
typedef helpers::ObjectPtrT<Layout> LayoutPtr; | Extend this abstract class to create your own log layout format. | |||
*/ | ||||
namespace spi | class LOG4CXX_EXPORT Layout : | |||
{ | public virtual spi::OptionHandler, | |||
class LoggingEvent; | public virtual helpers::ObjectImpl | |||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | { | |||
} | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Layout) | ||||
/** | BEGIN_LOG4CXX_CAST_MAP() | |||
Extend this abstract class to create your own log layout format. | LOG4CXX_CAST_ENTRY(Layout) | |||
*/ | LOG4CXX_CAST_ENTRY(spi::OptionHandler) | |||
class LOG4CXX_EXPORT Layout : | END_LOG4CXX_CAST_MAP() | |||
public virtual spi::OptionHandler, | ||||
public virtual helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Layout) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Layout) | ||||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | ||||
END_LOG4CXX_CAST_MAP() | ||||
virtual ~Layout() {} | virtual ~Layout(); | |||
void addRef() const; | ||||
void releaseRef() const; | ||||
/** | /** | |||
Implement this method to create your own layout format. | Implement this method to create your own layout format. | |||
*/ | */ | |||
virtual void format(ostream& output, const spi::LoggingEvent | virtual void format(LogString& output, | |||
Ptr& event) const = 0; | const spi::LoggingEventPtr& event, log4cxx::helpers::Po | |||
ol& pool) const = 0; | ||||
/** | /** | |||
Returns the content type output by this layout. The base cla | Returns the content type output by this layout. The base cl | |||
ss | ass | |||
returns "text/plain". | returns "text/plain". | |||
*/ | */ | |||
virtual String getContentType() const { return _T("text/plai | virtual LogString getContentType() const; | |||
n"); } | ||||
/** | /** | |||
Append the header for the layout format. The base class does | Append the header for the layout format. The base class doe | |||
nothing. | s | |||
*/ | nothing. | |||
virtual void appendHeader(ostream& output) {} | */ | |||
virtual void appendHeader(LogString& output, log4cxx::helpe | ||||
rs::Pool& p); | ||||
/** | /** | |||
Append the footer for the layout format. The base class does | Append the footer for the layout format. The base class doe | |||
nothing. | s | |||
*/ | nothing. | |||
virtual void appendFooter(ostream& output) {} | */ | |||
virtual void appendFooter(LogString& output, log4cxx::helpe | ||||
rs::Pool& p); | ||||
/** | /** | |||
If the layout handles the throwable object contained within | If the layout handles the throwable object contained within | |||
{@link spi::LoggingEvent LoggingEvent}, then the layout shou | {@link spi::LoggingEvent LoggingEvent}, then the layout sho | |||
ld return | uld return | |||
<code>false</code>. Otherwise, if the layout ignores throwab | <code>false</code>. Otherwise, if the layout ignores throwa | |||
le | ble | |||
object, then the layout should return <code>true</code>. | object, then the layout should return <code>true</code>. | |||
<p>The SimpleLayout, TTCCLayout, | <p>The SimpleLayout, TTCCLayout, | |||
PatternLayout all return <code>true</code>. The {@link | PatternLayout all return <code>true</code>. The {@link | |||
xml::XMLLayout XMLLayout} returns <code>false</code>. | xml::XMLLayout XMLLayout} returns <code>false</code>. | |||
*/ | */ | |||
virtual bool ignoresThrowable() const = 0; | virtual bool ignoresThrowable() const = 0; | |||
}; | }; | |||
LOG4CXX_PTR_DEF(Layout); | ||||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif // _LOG4CXX_LAYOUT_H | #endif // _LOG4CXX_LAYOUT_H | |||
End of changes. 12 change blocks. | ||||
63 lines changed or deleted | 72 lines changed or added | |||
level.h | level.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <limits.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <log4cxx/helpers/objectptr.h> | ||||
#ifndef _LOG4CXX_LEVEL_H | #ifndef _LOG4CXX_LEVEL_H | |||
#define _LOG4CXX_LEVEL_H | #define _LOG4CXX_LEVEL_H | |||
// Windows specific : | #include <log4cxx/logstring.h> | |||
// wingdi.h defines ERROR | #include <limits.h> | |||
#ifdef ERROR | #include <log4cxx/helpers/objectimpl.h> | |||
#define OLD_ERROR ERROR | #include <log4cxx/helpers/objectptr.h> | |||
#undef ERROR | ||||
#endif | ||||
// Windows specific : | ||||
// atldef.h defines DEBUG | ||||
#ifdef DEBUG | ||||
#define OLD_DEBUG DEBUG | ||||
#undef DEBUG | ||||
#endif | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Level; | class Level; | |||
/** smart pointer to a Level instance */ | /** smart pointer to a Level instance */ | |||
typedef helpers::ObjectPtrT<Level> LevelPtr; | LOG4CXX_PTR_DEF(Level); | |||
/** | ||||
Defines the minimum set of levels recognized by the system, that is | ||||
<code>OFF</code>, <code>FATAL</code>, <code>ERROR</code>, | ||||
<code>WARN</code>, <code>INFO</code>, <code>DEBUG</code> and | ||||
<code>ALL</code>. | ||||
<p>The <code>Level</code> class may be subclassed to define a larger | ||||
level set. | ||||
*/ | ||||
class LOG4CXX_EXPORT Level : public helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
class LOG4CXX_EXPORT LevelClass : public helpers::Class | ||||
{ | ||||
protected: | ||||
LevelClass(const String& className) : helpers::Class | ||||
(className) {} | ||||
public: | ||||
LevelClass() : helpers::Class(_T("Level")) {} | ||||
virtual const LevelPtr& toLevel(const String& sArg) | ||||
const | ||||
{ return Level::toLevel(sArg); } | ||||
virtual const LevelPtr& toLevel(int val) const | ||||
{ return Level::toLevel(val); } | ||||
}; | ||||
DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(Level, LevelClass) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Level) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | ||||
Instantiate a Level object. | ||||
*/ | ||||
Level(int level, const String& levelStr, int syslogEquivalen | ||||
t); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns #DEBUG. | ||||
*/ | ||||
static const LevelPtr& toLevel(const String& sArg); | ||||
/** | /** | |||
Convert an integer passed as argument to a level. If the | Defines the minimum set of levels recognized by the system, that is | |||
conversion fails, then this method returns #DEBUG. | <code>OFF</code>, <code>FATAL</code>, <code>ERROR</code>, | |||
*/ | <code>WARN</code>, <code>INFO</code>, <code>DEBUG</code> and | |||
static const LevelPtr& toLevel(int val); | <code>ALL</code>. | |||
<p>The <code>Level</code> class may be subclassed to define a large | ||||
r | ||||
level set. | ||||
*/ | ||||
class LOG4CXX_EXPORT Level : public helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
class LOG4CXX_EXPORT LevelClass : public helpers::Class | ||||
{ | ||||
public: | ||||
LevelClass() : helpers::Class() {} | ||||
/** | virtual LogString getName() const { | |||
Convert an integer passed as argument to a level. If the | return LOG4CXX_STR("Level"); | |||
conversion fails, then this method returns the specified def | } | |||
ault. | ||||
*/ | ||||
static const LevelPtr& toLevel(int val, const LevelPtr& defa | ||||
ultLevel); | ||||
/** | virtual LevelPtr toLevel(const LogString& sArg) con | |||
Convert the string passed as argument to a level. If the | st | |||
conversion fails, then this method returns the value of | { return Level::toLevelLS(sArg); } | |||
<code>defaultLevel</code>. | ||||
*/ | ||||
static const LevelPtr& toLevel(const String& sArg, | ||||
const LevelPtr& defaultLevel); | ||||
enum | virtual LevelPtr toLevel(int val) const | |||
{ | { return Level::toLevel(val); } | |||
OFF_INT = INT_MAX, | }; | |||
FATAL_INT = 50000, | ||||
ERROR_INT = 40000, | ||||
WARN_INT = 30000, | ||||
INFO_INT = 20000, | ||||
DEBUG_INT = 10000, | ||||
ALL_INT = INT_MIN | ||||
}; | ||||
/** | DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(Level, LevelClass) | |||
The <code>ALL</code> level designates all the levels | BEGIN_LOG4CXX_CAST_MAP() | |||
*/ | LOG4CXX_CAST_ENTRY(Level) | |||
static const LevelPtr ALL; | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
The <code>FATAL</code> level designates very severe error | Instantiate a Level object. | |||
events that will presumably lead the application to abort. | */ | |||
*/ | Level(int level, | |||
static const LevelPtr FATAL; | const LogString& name, | |||
int syslogEquivalent); | ||||
/** | /** | |||
The <code>ERROR</code> level designates error events that | Convert the string passed as argument to a level. If the | |||
might still allow the application to continue running. */ | conversion fails, then this method returns DEBUG. | |||
static const LevelPtr ERROR; | * @param sArg level name. | |||
*/ | ||||
static LevelPtr toLevel(const std::string& sArg); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns the value of | ||||
<code>defaultLevel</code>. | ||||
* @param sArg level name. | ||||
* @param defaultLevel level to return if no match. | ||||
* @return | ||||
*/ | ||||
static LevelPtr toLevel(const std::string& sArg, | ||||
const LevelPtr& defaultLevel); | ||||
/** | ||||
* Get the name of the level in the current encoding. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void toString(std::string& name) const; | ||||
/** | #if LOG4CXX_WCHAR_T_API | |||
The <code>WARN</code> level designates potentially harmful s | /** | |||
ituations. | Convert the string passed as argument to a level. If the | |||
*/ | conversion fails, then this method returns DEBUG. | |||
static const LevelPtr WARN; | * @param sArg level name. | |||
*/ | ||||
static LevelPtr toLevel(const std::wstring& sArg); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns the value of | ||||
<code>defaultLevel</code>. | ||||
* @param sArg level name. | ||||
* @param defaultLevel level to return if no match. | ||||
* @return | ||||
*/ | ||||
static LevelPtr toLevel(const std::wstring& sArg, | ||||
const LevelPtr& defaultLevel); | ||||
/** | ||||
* Get the name of the level. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void toString(std::wstring& name) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns DEBUG. | ||||
* @param sArg level name. | ||||
*/ | ||||
static LevelPtr toLevel(const std::basic_string<UniChar>& s | ||||
Arg); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns the value of | ||||
<code>defaultLevel</code>. | ||||
* @param sArg level name. | ||||
* @param defaultLevel level to return if no match. | ||||
* @return | ||||
*/ | ||||
static LevelPtr toLevel(const std::basic_string<UniChar>& s | ||||
Arg, | ||||
const LevelPtr& defaultLevel); | ||||
/** | ||||
* Get the name of the level. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void toString(std::basic_string<UniChar>& name) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns DEBUG. | ||||
* @param sArg level name. | ||||
*/ | ||||
static LevelPtr toLevel(const CFStringRef& sArg); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns the value of | ||||
<code>defaultLevel</code>. | ||||
* @param sArg level name. | ||||
* @param defaultLevel level to return if no match. | ||||
* @return | ||||
*/ | ||||
static LevelPtr toLevel(const CFStringRef& sArg, | ||||
const LevelPtr& defaultLevel); | ||||
/** | ||||
* Get the name of the level. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void toString(CFStringRef& name) const; | ||||
#endif | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns DEBUG. | ||||
* @param sArg level name. | ||||
*/ | ||||
static LevelPtr toLevelLS(const LogString& sArg); | ||||
/** | ||||
Convert the string passed as argument to a level. If the | ||||
conversion fails, then this method returns the value of | ||||
<code>defaultLevel</code>. | ||||
* @param sArg level name. | ||||
* @param defaultLevel level to return if no match. | ||||
* @return | ||||
*/ | ||||
static LevelPtr toLevelLS(const LogString& sArg, | ||||
const LevelPtr& defaultLevel); | ||||
/** | ||||
Returns the string representation of this level. | ||||
* @return level name. | ||||
*/ | ||||
LogString toString() const; | ||||
/** | /** | |||
The <code>INFO</code> level designates informational message | Convert an integer passed as argument to a level. If the | |||
s | conversion fails, then this method returns DEBUG. | |||
that highlight the progress of the application at coarse-gra | */ | |||
ined | static LevelPtr toLevel(int val); | |||
level. */ | ||||
static const LevelPtr INFO; | ||||
/** | /** | |||
The <code>DEBUG</code> level designates fine-grained | Convert an integer passed as argument to a level. If the | |||
informational events that are most useful to debug an | conversion fails, then this method returns the specified de | |||
application. */ | fault. | |||
static const LevelPtr DEBUG; | */ | |||
static LevelPtr toLevel(int val, const LevelPtr& defaultLev | ||||
el); | ||||
/** | enum { | |||
The <code>OFF</code> level designates not set level | OFF_INT = INT_MAX, | |||
*/ | FATAL_INT = 50000, | |||
static const LevelPtr OFF; | ERROR_INT = 40000, | |||
WARN_INT = 30000, | ||||
INFO_INT = 20000, | ||||
DEBUG_INT = 10000, | ||||
TRACE_INT = 5000, | ||||
ALL_INT = INT_MIN | ||||
}; | ||||
/** | static LevelPtr getAll(); | |||
Two levels are equal if their level fields are equal. | static LevelPtr getFatal(); | |||
*/ | static LevelPtr getError(); | |||
virtual bool equals(const LevelPtr& level) const; | static LevelPtr getWarn(); | |||
static LevelPtr getInfo(); | ||||
static LevelPtr getDebug(); | ||||
static LevelPtr getTrace(); | ||||
static LevelPtr getOff(); | ||||
inline bool operator==(const Level& level) const | /** | |||
{ return (this->level == level.level); } | Two levels are equal if their level fields are equal. | |||
*/ | ||||
virtual bool equals(const LevelPtr& level) const; | ||||
inline bool operator!=(const Level& level) const | inline bool operator==(const Level& level1) const | |||
{ return (this->level != level.level); } | { return (this->level == level1.level); } | |||
/** | inline bool operator!=(const Level& level1) const | |||
Return the syslog equivalent of this level as an integer. | { return (this->level != level1.level); } | |||
*/ | ||||
virtual int getSyslogEquivalent() const; | ||||
/** | /** | |||
Returns <code>true</code> if this level has a higher or equa | Return the syslog equivalent of this level as an integer. | |||
l | */ | |||
level than the level passed as argument, <code>false</code> | inline int getSyslogEquivalent() const { | |||
otherwise. | return syslogEquivalent; | |||
} | ||||
<p>You should think twice before overriding the default | /** | |||
implementation of <code>isGreaterOrEqual</code> method. | Returns <code>true</code> if this level has a higher or equ | |||
al | ||||
level than the level passed as argument, <code>false</code> | ||||
otherwise. | ||||
*/ | <p>You should think twice before overriding the default | |||
virtual bool isGreaterOrEqual(const LevelPtr& level) const; | implementation of <code>isGreaterOrEqual</code> method. | |||
/** | */ | |||
Returns the string representation of this priority. | virtual bool isGreaterOrEqual(const LevelPtr& level) const; | |||
*/ | ||||
virtual const String& toString() const; | ||||
/** | /** | |||
Returns the integer representation of this level. | Returns the integer representation of this level. | |||
*/ | */ | |||
virtual int toInt() const; | inline int toInt() const { | |||
return level; | ||||
} | ||||
public: | private: | |||
int level; | int level; | |||
String levelStr; | LogString name; | |||
int syslogEquivalent; | int syslogEquivalent; | |||
}; | Level(const Level&); | |||
Level& operator=(const Level&); | ||||
}; | ||||
} | } | |||
#define DECLARE_LOG4CXX_LEVEL(level)\ | #define DECLARE_LOG4CXX_LEVEL(level)\ | |||
public:\ | public:\ | |||
class Class##level : public Level::LevelClass\ | class Class##level : public Level::LevelClass\ | |||
{\ | {\ | |||
public:\ | public:\ | |||
Class##level() : Level::LevelClass(_T(#level)) {}\ | Class##level() : Level::LevelClass() {}\ | |||
virtual const LevelPtr& toLevel(const String& sArg) const\ | virtual LogString getName() const { return LOG4CXX_STR(#level); } \ | |||
{ return level::toLevel(sArg); }\ | virtual LevelPtr toLevel(const LogString& sArg) const\ | |||
virtual const LevelPtr& toLevel(int val) const\ | { return level::toLevelLS(sArg); }\ | |||
{ return level::toLevel(val); }\ | virtual LevelPtr toLevel(int val) const\ | |||
{ return level::toLevel(val); }\ | ||||
};\ | };\ | |||
DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(level, Class##level) | DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(level, Class##level) | |||
#define IMPLEMENT_LOG4CXX_LEVEL(level) \ | #define IMPLEMENT_LOG4CXX_LEVEL(level) \ | |||
IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(level, Class##level) | IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(level, Class##level) | |||
#endif //_LOG4CXX_LEVEL_H | #endif //_LOG4CXX_LEVEL_H | |||
End of changes. 27 change blocks. | ||||
173 lines changed or deleted | 233 lines changed or added | |||
levelmatchfilter.h | levelmatchfilter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_VARIA_LEVEL_MATCH_FILTER_H | #ifndef _LOG4CXX_FILTER_LEVEL_MATCH_FILTER_H | |||
#define _LOG4CXX_VARIA_LEVEL_MATCH_FILTER_H | #define _LOG4CXX_FILTER_LEVEL_MATCH_FILTER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/spi/filter.h> | #include <log4cxx/spi/filter.h> | |||
#include <log4cxx/level.h> | #include <log4cxx/level.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Level; | class Level; | |||
namespace varia | namespace filter | |||
{ | { | |||
/** | /** | |||
This is a very simple filter based on level matching. | This is a very simple filter based on level matching. | |||
<p>The filter admits two options <b>LevelToMatch</b> and | <p>The filter admits two options <b>LevelToMatch</b> and | |||
<b>AcceptOnMatch</b>. If there is an exact match between the | <b>AcceptOnMatch</b>. If there is an exact match between th | |||
value | e value | |||
of the <b>LevelToMatch</b> option and the level of the {@lin | of the <b>LevelToMatch</b> option and the level of the {@li | |||
k | nk | |||
spi::LoggingEvent LoggingEvent}, then the #decide method ret | spi::LoggingEvent LoggingEvent}, then the #decide method re | |||
urns {@link | turns {@link | |||
spi::Filter#ACCEPT ACCEPT} in case the <b>AcceptOnMatch</b> | spi::Filter#ACCEPT ACCEPT} in case the <b>AcceptOnMatch</b> | |||
option value is set to <code>true</code>, if it is <code>fal | option value is set to <code>true</code>, if it is <code>fa | |||
se</code> | lse</code> | |||
then {@link spi::Filter#DENY DENY} is returned. If there is | then {@link spi::Filter#DENY DENY} is returned. If there is | |||
no match, | no match, | |||
{@link spi::Filter#NEUTRAL NEUTRAL} is returned. | {@link spi::Filter#NEUTRAL NEUTRAL} is returned. | |||
*/ | */ | |||
class LevelMatchFilter; | ||||
typedef helpers::ObjectPtrT<LevelMatchFilter> LevelMatchFilt | ||||
erPtr; | ||||
class LOG4CXX_EXPORT LevelMatchFilter : public spi::Filter | class LOG4CXX_EXPORT LevelMatchFilter : public spi::Filter | |||
{ | { | |||
private: | private: | |||
static String LEVEL_TO_MATCH_OPTION; | bool acceptOnMatch; | |||
static String ACCEPT_ON_MATCH_OPTION; | LevelPtr levelToMatch; | |||
bool acceptOnMatch; | public: | |||
LevelPtr levelToMatch; | typedef spi::Filter BASE_CLASS; | |||
DECLARE_LOG4CXX_OBJECT(LevelMatchFilter) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(LevelMatchFilter) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | ||||
END_LOG4CXX_CAST_MAP() | ||||
public: | LevelMatchFilter(); | |||
typedef spi::Filter BASE_CLASS; | ||||
DECLARE_LOG4CXX_OBJECT(LevelMatchFilter) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(LevelMatchFilter) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | ||||
END_LOG4CXX_CAST_MAP() | ||||
LevelMatchFilter(); | /** | |||
Set options | ||||
*/ | ||||
virtual void setOption(const LogString& option, | ||||
const LogString& value); | ||||
/** | void setLevelToMatch(const LogString& levelToMatch) | |||
Set options | ; | |||
*/ | ||||
virtual void setOption(const String& option, | ||||
const String& value); | ||||
void setLevelToMatch(const String& levelToMatch); | LogString getLevelToMatch() const; | |||
const String& getLevelToMatch() const; | inline void setAcceptOnMatch(bool acceptOnMatch1) | |||
{ this->acceptOnMatch = acceptOnMatch1; } | ||||
inline void setAcceptOnMatch(bool acceptOnMatch) | inline bool getAcceptOnMatch() const | |||
{ this->acceptOnMatch = acceptOnMatch; } | { return acceptOnMatch; } | |||
inline bool getAcceptOnMatch() const | /** | |||
{ return acceptOnMatch; } | Return the decision of this filter. | |||
/** | Returns {@link spi::Filter#NEUTRAL NEUTRAL} if the | |||
Return the decision of this filter. | <b>LevelToMatch</b> option is not set or if there i | |||
s not match. | ||||
Otherwise, if there is a match, then the returned d | ||||
ecision is | ||||
{@link spi::Filter#ACCEPT ACCEPT} if the <b>AcceptO | ||||
nMatch</b> | ||||
property is set to <code>true</code>. The returned | ||||
decision is | ||||
{@link spi::Filter#DENY DENY} if the | ||||
<b>AcceptOnMatch</b> property is set to false. | ||||
*/ | ||||
FilterDecision decide(const spi::LoggingEventPtr& e | ||||
vent) const; | ||||
}; // class LevelMatchFilter | ||||
LOG4CXX_PTR_DEF(LevelMatchFilter); | ||||
} // namespace filter | ||||
} // namespace log4cxx | ||||
Returns {@link spi::Filter#NEUTRAL NEUTRAL} if the | #if defined(_MSC_VER) | |||
<b>LevelToMatch</b> option is not set or if there is | #pragma warning ( pop ) | |||
not match. | #endif | |||
Otherwise, if there is a match, then the returned de | ||||
cision is | ||||
{@link spi::Filter#ACCEPT ACCEPT} if the <b>AcceptOn | ||||
Match</b> | ||||
property is set to <code>true</code>. The returned d | ||||
ecision is | ||||
{@link spi::Filter#DENY DENY} if the | ||||
<b>AcceptOnMatch</b> property is set to false. | ||||
*/ | ||||
FilterDecision decide(const spi::LoggingEventPtr& ev | ||||
ent) const; | ||||
}; // class LevelMatchFilter | ||||
} // namespace varia | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_VARIA_STRING_MATCH_FILTER_H | #endif // _LOG4CXX_FILTER_STRING_MATCH_FILTER_H | |||
End of changes. 17 change blocks. | ||||
74 lines changed or deleted | 80 lines changed or added | |||
levelrangefilter.h | levelrangefilter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_VARIA_LEVEL_RANGE_FILTER_H | #ifndef _LOG4CXX_FILTER_LEVEL_RANGE_FILTER_H | |||
#define _LOG4CXX_VARIA_LEVEL_RANGE_FILTER_H | #define _LOG4CXX_FILTER_LEVEL_RANGE_FILTER_H | |||
#include <log4cxx/spi/filter.h> | #include <log4cxx/spi/filter.h> | |||
#include <log4cxx/level.h> | #include <log4cxx/level.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace varia | namespace filter | |||
{ | { | |||
/** | /** | |||
This is a very simple filter based on level matching, which | This is a very simple filter based on level matching, which | |||
can be | can be | |||
used to reject messages with priorities outside a certain ra | used to reject messages with priorities outside a certain r | |||
nge. | ange. | |||
<p>The filter admits three options <b>LevelMin</b>, <b>Level | ||||
Max</b> | ||||
and <b>AcceptOnMatch</b>. | ||||
<p>If the level of the {@link spi::LoggingEvent LoggingEvent | <p>The filter admits three options <b>LevelMin</b>, <b>Leve | |||
} is not | lMax</b> | |||
between Min and Max (inclusive), then {@link spi::Filter#DEN | and <b>AcceptOnMatch</b>. | |||
Y DENY} | ||||
is returned. | ||||
<p> If the Logging event level is within the specified range | <p>If the level of the {@link spi::LoggingEvent LoggingEven | |||
, then if | t} is not | |||
<b>AcceptOnMatch</b> is true, {@link spi::Filter#ACCEPT ACCE | between Min and Max (inclusive), then {@link spi::Filter#DE | |||
PT} is | NY DENY} | |||
returned, and if <b>AcceptOnMatch</b> is false, | is returned. | |||
{@link spi::Filter#NEUTRAL NEUTRAL} is returned. | ||||
<p>If <code>LevelMin</code>w is not defined, then there is n | <p> If the Logging event level is within the specified rang | |||
o | e, then if | |||
minimum acceptable level (ie a level is never rejected for | <b>AcceptOnMatch</b> is true, {@link spi::Filter#ACCEPT ACC | |||
being too "low"/unimportant). If <code>LevelMax</code> is n | EPT} is | |||
ot | returned, and if <b>AcceptOnMatch</b> is false, | |||
defined, then there is no maximum acceptable level (ie a | {@link spi::Filter#NEUTRAL NEUTRAL} is returned. | |||
level is never rejected for beeing too "high"/important). | ||||
<p>Refer to the {@link | <p>If <code>LevelMin</code>w is not defined, then there is | |||
AppenderSkeleton#setThreshold setThreshold} method | no | |||
available to <code>all</code> appenders extending | minimum acceptable level (ie a level is never rejected for | |||
AppenderSkeleton for a more convenient way to | being too "low"/unimportant). If <code>LevelMax</code> is | |||
filter out events by level. | not | |||
*/ | defined, then there is no maximum acceptable level (ie a | |||
class LevelRangeFilter; | level is never rejected for beeing too "high"/important). | |||
typedef helpers::ObjectPtrT<LevelRangeFilter> LevelRangeFilt | ||||
erPtr; | ||||
class LOG4CXX_EXPORT LevelRangeFilter : public spi::Filter | <p>Refer to the {@link | |||
{ | AppenderSkeleton#setThreshold setThreshold} method | |||
private: | available to <code>all</code> appenders extending | |||
static String LEVEL_MIN_OPTION; | AppenderSkeleton for a more convenient way to | |||
static String LEVEL_MAX_OPTION; | filter out events by level. | |||
static String ACCEPT_ON_MATCH_OPTION; | */ | |||
/** | class LOG4CXX_EXPORT LevelRangeFilter : public spi::Filter | |||
Do we return ACCEPT when a match occurs. Default is | { | |||
<code>false</code>, so that later filters get run by | private: | |||
default | /** | |||
*/ | Do we return ACCEPT when a match occurs. Default is | |||
bool acceptOnMatch; | <code>false</code>, so that later filters get run b | |||
LevelPtr levelMin; | y default | |||
LevelPtr levelMax; | */ | |||
bool acceptOnMatch; | ||||
LevelPtr levelMin; | ||||
LevelPtr levelMax; | ||||
public: | public: | |||
typedef spi::Filter BASE_CLASS; | typedef spi::Filter BASE_CLASS; | |||
DECLARE_LOG4CXX_OBJECT(LevelRangeFilter) | DECLARE_LOG4CXX_OBJECT(LevelRangeFilter) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(LevelRangeFilter) | LOG4CXX_CAST_ENTRY(LevelRangeFilter) | |||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
LevelRangeFilter(); | LevelRangeFilter(); | |||
/** | /** | |||
Set options | Set options | |||
*/ | */ | |||
virtual void setOption(const String& option, | virtual void setOption(const LogString& option, | |||
const String& value); | const LogString& value); | |||
/** | /** | |||
Set the <code>LevelMin</code> option. | Set the <code>LevelMin</code> option. | |||
*/ | */ | |||
void setLevelMin(const LevelPtr& levelMin) | void setLevelMin(const LevelPtr& levelMin1) | |||
{ this->levelMin = levelMin; } | { this->levelMin = levelMin1; } | |||
/** | /** | |||
Get the value of the <code>LevelMin</code> option. | Get the value of the <code>LevelMin</code> option. | |||
*/ | */ | |||
const LevelPtr& getLevelMin() const | const LevelPtr& getLevelMin() const | |||
{ return levelMin; } | { return levelMin; } | |||
/** | /** | |||
Set the <code>LevelMax</code> option. | Set the <code>LevelMax</code> option. | |||
*/ | */ | |||
void setLevelMax(const LevelPtr& levelMax) | void setLevelMax(const LevelPtr& levelMax1) | |||
{ this->levelMax = levelMax; } | { this->levelMax = levelMax1; } | |||
/** | /** | |||
Get the value of the <code>LevelMax</code> option. | Get the value of the <code>LevelMax</code> option. | |||
*/ | */ | |||
const LevelPtr& getLevelMax() const | const LevelPtr& getLevelMax() const | |||
{ return levelMax; } | { return levelMax; } | |||
/** | /** | |||
Set the <code>AcceptOnMatch</code> option. | Set the <code>AcceptOnMatch</code> option. | |||
*/ | */ | |||
inline void setAcceptOnMatch(bool acceptOnMatch) | inline void setAcceptOnMatch(bool acceptOnMatch1) | |||
{ this->acceptOnMatch = acceptOnMatch; } | { this->acceptOnMatch = acceptOnMatch1; } | |||
/** | /** | |||
Get the value of the <code>AcceptOnMatch</code> opti | Get the value of the <code>AcceptOnMatch</code> opt | |||
on. | ion. | |||
*/ | */ | |||
inline bool getAcceptOnMatch() const | inline bool getAcceptOnMatch() const | |||
{ return acceptOnMatch; } | { return acceptOnMatch; } | |||
/** | /** | |||
Return the decision of this filter. | Return the decision of this filter. | |||
Returns {@link spi::Filter#NEUTRAL NEUTRAL} if the | Returns {@link spi::Filter#NEUTRAL NEUTRAL} if the | |||
<b>LevelToMatch</b> option is not set or if there is | <b>LevelToMatch</b> option is not set or if there i | |||
not match. | s not match. | |||
Otherwise, if there is a match, then the returned de | Otherwise, if there is a match, then the returned d | |||
cision is | ecision is | |||
{@link spi::Filter#ACCEPT ACCEPT} if the | {@link spi::Filter#ACCEPT ACCEPT} if the | |||
<b>AcceptOnMatch</b> property is set to <code>true</ | <b>AcceptOnMatch</b> property is set to <code>true< | |||
code>. The | /code>. The | |||
returned decision is {@link spi::Filter#DENY DENY} i | returned decision is {@link spi::Filter#DENY DENY} | |||
f the | if the | |||
<b>AcceptOnMatch</b> property is set to false. | <b>AcceptOnMatch</b> property is set to false. | |||
*/ | */ | |||
FilterDecision decide(const spi::LoggingEventPtr& ev | FilterDecision decide(const spi::LoggingEventPtr& e | |||
ent) const; | vent) const; | |||
}; // class LevelMatchFilter | }; // class LevelRangeFilter | |||
} // namespace varia | LOG4CXX_PTR_DEF(LevelRangeFilter); | |||
}; // namespace log4cxx | } // namespace filter | |||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_VARIA_LEVEL_RANGE_FILTER_H | #endif // _LOG4CXX_FILTER_LEVEL_RANGE_FILTER_H | |||
End of changes. 21 change blocks. | ||||
122 lines changed or deleted | 117 lines changed or added | |||
loader.h | loader.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_LOADER_H | #ifndef _LOG4CXX_HELPERS_LOADER_H | |||
#define _LOG4CXX_HELPERS_LOADER_H | #define _LOG4CXX_HELPERS_LOADER_H | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
#include <log4cxx/helpers/inputstream.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class Class; | class Class; | |||
class LOG4CXX_EXPORT Loader | class LOG4CXX_EXPORT Loader | |||
{ | { | |||
public: | public: | |||
static const Class& loadClass(const String& clazz); | static const Class& loadClass(const LogString& claz | |||
static String getResource(const String& name); | z); | |||
static istream * getResourceAsStream(const String& n | ||||
ame); | static InputStreamPtr getResourceAsStream( | |||
}; | const LogString& n | |||
} // namespace helpers | ame); | |||
}; // namespace log4cxx | }; | |||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_LOADER_H | #endif //_LOG4CXX_HELPERS_LOADER_H | |||
End of changes. 5 change blocks. | ||||
19 lines changed or deleted | 23 lines changed or added | |||
locale.h | locale.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_LOCALE_H | #ifndef _LOG4CXX_HELPERS_LOCALE_H | |||
#define _LOG4CXX_HELPERS_LOCALE_H | #define _LOG4CXX_HELPERS_LOCALE_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT Locale | class LOG4CXX_EXPORT Locale | |||
{ | { | |||
public: | public: | |||
Locale(const String& language); | Locale(const LogString& language); | |||
Locale(const String& language, const String& country | Locale(const LogString& language, const LogString& | |||
); | country); | |||
Locale(const String& language, const String& country | Locale(const LogString& language, const LogString& | |||
, | country, | |||
const String& variant); | const LogString& variant); | |||
static const Locale& getDefault(); | ||||
static void setDefault(const Locale& newLocale); | ||||
const String& getLanguage() const; | const LogString& getLanguage() const; | |||
const String& getCountry() const; | const LogString& getCountry() const; | |||
const String& getVariant() const; | const LogString& getVariant() const; | |||
protected: | protected: | |||
String language; | Locale(const Locale&); | |||
String country; | Locale& operator=(const Locale&); | |||
String variant; | const LogString language; | |||
}; // class Locale | const LogString country; | |||
} // namespace helpers | const LogString variant; | |||
}; // namespace log4cxx | }; // class Locale | |||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_LOCALE_H | #endif // _LOG4CXX_HELPERS_LOCALE_H | |||
End of changes. 5 change blocks. | ||||
30 lines changed or deleted | 30 lines changed or added | |||
logger.h | logger.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_LOGGER_H | #ifndef _LOG4CXX_LOGGER_H | |||
#define _LOG4CXX_LOGGER_H | #define _LOG4CXX_LOGGER_H | |||
#include <log4cxx/config.h> | #if defined(_MSC_VER) | |||
#include <vector> | #pragma warning ( push ) | |||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/appenderattachableimpl.h> | #include <log4cxx/helpers/appenderattachableimpl.h> | |||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <log4cxx/level.h> | #include <log4cxx/level.h> | |||
#include <log4cxx/spi/loggerfactory.h> | #include <log4cxx/helpers/pool.h> | |||
#include <log4cxx/spi/loggerrepository.h> | #include <log4cxx/helpers/mutex.h> | |||
#include <log4cxx/spi/location/locationinfo.h> | ||||
#include <log4cxx/helpers/resourcebundle.h> | #include <log4cxx/helpers/resourcebundle.h> | |||
#include <log4cxx/helpers/messagebuffer.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | ||||
{ | ||||
class LoggerFactory; | ||||
typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | ||||
class LoggerRepository; | namespace helpers { | |||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | class synchronized; | |||
ryPtr; | } | |||
} | ||||
class Logger; | namespace spi { | |||
/** smart pointer to a Logger class */ | class LoggerRepository; | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | LOG4CXX_PTR_DEF(LoggerRepository); | |||
class LoggerFactory; | ||||
LOG4CXX_PTR_DEF(LoggerFactory); | ||||
} | ||||
/** vector of {@link Logger loggers} */ | class Logger; | |||
typedef std::vector<LoggerPtr> LoggerList; | /** smart pointer to a Logger class */ | |||
LOG4CXX_PTR_DEF(Logger); | ||||
LOG4CXX_LIST_DEF(LoggerList, LoggerPtr); | ||||
/** | /** | |||
This is the central class in the log4cxx package. Most logging | This is the central class in the log4cxx package. Most logging | |||
operations, except configuration, are done through this class. | operations, except configuration, are done through this class. | |||
*/ | */ | |||
class LOG4CXX_EXPORT Logger : | class LOG4CXX_EXPORT Logger : | |||
public virtual spi::AppenderAttachable, | public virtual log4cxx::spi::AppenderAttachable, | |||
public virtual helpers::ObjectImpl | public virtual helpers::ObjectImpl | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Logger) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(Logger) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(Logger) | LOG4CXX_CAST_ENTRY(Logger) | |||
LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | LOG4CXX_CAST_ENTRY(spi::AppenderAttachable) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
private: | ||||
/** | ||||
* Reference to memory pool. | ||||
*/ | ||||
helpers::Pool* pool; | ||||
protected: | protected: | |||
/** | /** | |||
The name of this logger. | The name of this logger. | |||
*/ | */ | |||
String name; | LogString name; | |||
/** | /** | |||
The assigned level of this logger. The | The assigned level of this logger. The | |||
<code>level</code> variable need not be assigned a value in | <code>level</code> variable need not be assigned a value in | |||
which case it is inherited form the hierarchy. */ | which case it is inherited form the hierarchy. */ | |||
LevelPtr level; | LevelPtr level; | |||
/** | /** | |||
The parent of this logger. All loggers have at least one | The parent of this logger. All loggers have at least one | |||
ancestor which is the root logger. */ | ancestor which is the root logger. */ | |||
LoggerPtr parent; | LoggerPtr parent; | |||
/** The resourceBundle for localized messages. | /** The resourceBundle for localized messages. | |||
@see setResourceBundle, getResourceBundle | ||||
*/ | ||||
helpers::ResourceBundlePtr resourceBundle; | ||||
/** | @see setResourceBundle, getResourceBundle | |||
The fully qualified name of the Category class. See also the | */ | |||
getFQCN | helpers::ResourceBundlePtr resourceBundle; | |||
method. | ||||
*/ | ||||
static String FQCN; | ||||
// Loggers need to know what Hierarchy they are in | // Loggers need to know what Hierarchy they are in | |||
spi::LoggerRepository * repository; | log4cxx::spi::LoggerRepository * repository; | |||
helpers::AppenderAttachableImplPtr aai; | helpers::AppenderAttachableImplPtr aai; | |||
/** Additivity is set to true by default, that is children inherit | /** Additivity is set to true by default, that is children | |||
the appenders of their ancestors by default. If this variable is | inherit | |||
set to <code>false</code> then the appenders found in the | the appenders of their ancestors by default. If thi | |||
ancestors of this logger are not used. However, the children | s variable is | |||
of this logger will inherit its appenders, unless the children | set to <code>false</code> then the appenders found | |||
have their additivity flag set to <code>false</code> too. See | in the | |||
the user manual for more details. */ | ancestors of this logger are not used. However, the | |||
bool additive; | children | |||
of this logger will inherit its appenders, unless t | ||||
he children | ||||
have their additivity flag set to <code>false</code | ||||
> too. See | ||||
the user manual for more details. */ | ||||
bool additive; | ||||
protected: | protected: | |||
friend class DefaultCategoryFactory; | friend class DefaultLoggerFactory; | |||
/** | /** | |||
This constructor created a new <code>logger</code> instance | This constructor created a new <code>logger</code> instance and | |||
and | sets its name. | |||
sets its name. | ||||
<p>It is intended to be used by sub-classes only. You should | <p>It is intended to be used by sub-classes only. You should not | |||
not | create categories directly. | |||
create categories directly. | ||||
@param name The name of the logger. | @param pool lifetime of pool must be longer than logger. | |||
*/ | @param name The name of the logger. | |||
Logger(const String& name); | */ | |||
Logger(log4cxx::helpers::Pool& pool, const LogString& name); | ||||
public: | public: | |||
~Logger(); | ~Logger(); | |||
void addRef() const; | ||||
void releaseRef() const; | ||||
/** | /** | |||
Add <code>newAppender</code> to the list of appenders of this | Add <code>newAppender</code> to the list of appenders of this | |||
Logger instance. | Logger instance. | |||
<p>If <code>newAppender</code> is already in the list of | <p>If <code>newAppender</code> is already in the list of | |||
appenders, then it won't be added again. | appenders, then it won't be added again. | |||
*/ | */ | |||
virtual void addAppender(const AppenderPtr& newAppender); | virtual void addAppender(const AppenderPtr& newAppender); | |||
/** | ||||
If <code>assertion</code> parameter is <code>false</code>, then | ||||
logs <code>msg</code> as an #error statement. | ||||
@param assertion | ||||
@param msg The message to print if <code>assertion</code> is | ||||
false. | ||||
*/ | ||||
void assertLog(bool assertion, const String& msg); | ||||
/** | /** | |||
Call the appenders in the hierrachy starting at | Call the appenders in the hierrachy starting at | |||
<code>this</code>. If no appenders could be found, emit a | <code>this</code>. If no appenders could be found, emit a | |||
warning. | warning. | |||
<p>This method calls all the appenders inherited from the | <p>This method calls all the appenders inherited from the | |||
hierarchy circumventing any evaluation of whether to log or not | hierarchy circumventing any evaluation of whether to log or not | |||
to log the particular log request. | to log the particular log request. | |||
@param event the event to log. */ | @param event the event to log. | |||
void callAppenders(const spi::LoggingEventPtr& event); | @param p memory pool for any allocations needed to process request. | |||
*/ | ||||
void callAppenders(const log4cxx::spi::LoggingEventPtr& event, log4 | ||||
cxx::helpers::Pool& p) const; | ||||
/** | /** | |||
Close all attached appenders implementing the AppenderAttachable | Close all attached appenders implementing the AppenderAttachable | |||
interface. | interface. | |||
*/ | */ | |||
void closeNestedAppenders(); | void closeNestedAppenders(); | |||
/** | /** | |||
Log a message string with the {@link Level#DEBUG DEBUG} level. | Log a message string with the DEBUG level. | |||
<p>This method first checks if this logger is <code>DEBUG</code> | <p>This method first checks if this logger is <code>DEBUG</code> | |||
enabled by comparing the level of this logger with the {@link | enabled by comparing the level of this logger with the | |||
Level#DEBUG DEBUG} level. If this logger is | DEBUG level. If this logger is | |||
<code>DEBUG</code> enabled, it proceeds to call all the | <code>DEBUG</code> enabled, it proceeds to call all the | |||
registered appenders in this logger and also higher in the | registered appenders in this logger and also higher in the | |||
hierarchy depending on the value of the additivity flag. | hierarchy depending on the value of the additivity flag. | |||
@param message the message string to log. | @param msg the message string to log. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void debug(const std::string& msg, const log4cxx::spi::LocationInfo | |||
void debug(const String& message, const char* file=0, int line=-1); | & location) const; | |||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void debug(const std::string& msg) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | /** | |||
Log a message string with the {@link Level#ERROR ERROR} level. | Log a message string with the DEBUG level. | |||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void debug(const std::wstring& msg, const log4cxx::spi::LocationInf | ||||
o& location) const; | ||||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void debug(const std::wstring& msg) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void debug(const std::basic_string<UniChar>& msg, const log4cxx::sp | ||||
i::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void debug(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void debug(const CFStringRef& msg, const log4cxx::spi::LocationInfo | ||||
& location) const; | ||||
/** | ||||
Log a message string with the DEBUG level. | ||||
<p>This method first checks if this logger is <code>DEBUG</code> | ||||
enabled by comparing the level of this logger with the | ||||
DEBUG level. If this logger is | ||||
<code>DEBUG</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void debug(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | <p>This method first checks if this logger is <code>ERROR</code> | |||
enabled by comparing the level of this logger with the {@link | enabled by comparing the level of this logger with the | |||
Level#ERROR ERROR} level. If this logger is | ERROR level. If this logger is | |||
<code>ERROR</code> enabled, it proceeds to call all the | <code>ERROR</code> enabled, it proceeds to call all the | |||
registered appenders in this logger and also higher in the | registered appenders in this logger and also higher in the | |||
hierarchy depending on the value of the additivity flag. | hierarchy depending on the value of the additivity flag. | |||
@param message the message string to log. | @param msg the message string to log. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void error(const std::string& msg, const log4cxx::spi::LocationInfo | |||
void error(const String& message, const char* file=0, int line=-1); | & location) const; | |||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void error(const std::string& msg) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | /** | |||
Log a message string with the {@link Level#FATAL FATAL} level. | Log a message string with the ERROR level. | |||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void error(const std::wstring& msg) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void error(const std::wstring& msg, const log4cxx::spi::LocationInf | ||||
o& location) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void error(const std::basic_string<UniChar>& msg, const log4cxx::sp | ||||
i::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void error(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void error(const CFStringRef& msg, const log4cxx::spi::LocationInfo | ||||
& location) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void error(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | ||||
Log a message string with the FATAL level. | ||||
<p>This method first checks if this logger is <code>FATAL</code> | <p>This method first checks if this logger is <code>FATAL</code> | |||
enabled by comparing the level of this logger with the {@link | enabled by comparing the level of this logger with the | |||
Level#FATAL FATAL} level. If this logger is | FATAL level. If this logger is | |||
<code>FATAL</code> enabled, it proceeds to call all the | <code>FATAL</code> enabled, it proceeds to call all the | |||
registered appenders in this logger and also higher in the | registered appenders in this logger and also higher in the | |||
hierarchy depending on the value of the additivity flag. | hierarchy depending on the value of the additivity flag. | |||
@param message the message string to log. | @param msg the message string to log. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void fatal(const std::string& msg, const log4cxx::spi::LocationInfo | |||
void fatal(const String& message, const char* file=0, int line=-1); | & location) const; | |||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void fatal(const std::string& msg) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void fatal(const std::wstring& msg, const log4cxx::spi::LocationInf | ||||
o& location) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void fatal(const std::wstring& msg) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void fatal(const std::basic_string<UniChar>& msg, const log4cxx::sp | ||||
i::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void fatal(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void fatal(const CFStringRef& msg, const log4cxx::spi::LocationInfo | ||||
& location) const; | ||||
/** | ||||
Log a message string with the ERROR level. | ||||
<p>This method first checks if this logger is <code>ERROR</code> | ||||
enabled by comparing the level of this logger with the | ||||
ERROR level. If this logger is | ||||
<code>ERROR</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void fatal(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | /** | |||
This method creates a new logging event and logs the event | This method creates a new logging event and logs the event | |||
without further checks. | without further checks. | |||
@param level the level to log. | @param level the level to log. | |||
@param message the message string to log. | @param message message. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void forcedLog(const LevelPtr& level, const std::string& message, | |||
void forcedLog(const LevelPtr& level, const String& message, | const log4cxx::spi::LocationInfo& location) const; | |||
const char* file=0, int line=-1); | /** | |||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const std::string& message) c | ||||
onst; | ||||
/** | #if LOG4CXX_WCHAR_T_API | |||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const std::wstring& message, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const std::wstring& message) | ||||
const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API || LOG4CXX_CFSTRING_API | ||||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const std::basic_string<UniCh | ||||
ar>& message, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const std::basic_string<UniCh | ||||
ar>& message) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const CFStringRef& message, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This method creates a new logging event and logs the event | ||||
without further checks. | ||||
@param level the level to log. | ||||
@param message message. | ||||
*/ | ||||
void forcedLog(const LevelPtr& level, const CFStringRef& message) c | ||||
onst; | ||||
#endif | ||||
/** | ||||
This method creates a new logging event and logs the event | This method creates a new logging event and logs the event | |||
without further checks. | without further checks. | |||
@param fqcn The fully qualified name of the calling logger c lass. | ||||
@param level the level to log. | @param level the level to log. | |||
@param message the message string to log. | @param message the message string to log. | |||
@param file the file where the log statement was written. | @param location location of the logging statement. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void forcedLogLS(const LevelPtr& level, const LogString& message, | |||
protected: | const log4cxx::spi::LocationInfo& location) const; | |||
void forcedLog(const String& fqcn, const LevelPtr& level, const Str | ||||
ing& message, | ||||
const char* file=0, int line=-1); | ||||
/** | /** | |||
Get the additivity flag for this Logger instance. | Get the additivity flag for this Logger instance. | |||
*/ | */ | |||
public: | ||||
bool getAdditivity() const; | bool getAdditivity() const; | |||
/** | /** | |||
Get the appenders contained in this logger as an AppenderLis | Get the appenders contained in this logger as an AppenderList. | |||
t. | If no appenders can be found, then an empty AppenderList | |||
If no appenders can be found, then an empty AppenderList | is returned. | |||
is returned. | @return AppenderList An collection of the appenders in this logger. | |||
@return AppenderList An collection of the appenders in this | */ | |||
logger.*/ | AppenderList getAllAppenders() const; | |||
AppenderList getAllAppenders() const; | ||||
/** | /** | |||
Look for the appender named as <code>name</code>. | Look for the appender named as <code>name</code>. | |||
<p>Return the appender with that name if in the list. Return | <p>Return the appender with that name if in the list. Return | |||
<code>NULL</code> otherwise. */ | <code>NULL</code> otherwise. */ | |||
AppenderPtr getAppender(const String& name) const; | AppenderPtr getAppender(const LogString& name) const; | |||
/** | /** | |||
Starting from this logger, search the logger hierarchy for a | Starting from this logger, search the logger hierarchy for a | |||
non-null level and return it. | non-null level and return it. | |||
<p>The Logger class is designed so that this method executes as | <p>The Logger class is designed so that this method executes as | |||
quickly as possible. | quickly as possible. | |||
@throws RuntimeException if all levels are null in the hiera rchy | @throws RuntimeException if all levels are null in the hierarchy | |||
*/ | */ | |||
virtual const LevelPtr& getEffectiveLevel() const; | virtual const LevelPtr& getEffectiveLevel() const; | |||
/** | /** | |||
Return the the LoggerRepository where this | Return the the LoggerRepository where this | |||
<code>Logger</code> is attached. | <code>Logger</code> is attached. | |||
*/ | */ | |||
spi::LoggerRepositoryPtr getLoggerRepository() const; | log4cxx::spi::LoggerRepositoryPtr getLoggerRepository() const; | |||
/** | /** | |||
Return the logger name. */ | * Get the logger name. | |||
inline const String& getName() const | * @return logger name as LogString. | |||
{ return name; } | */ | |||
const LogString getName() const { return name; } | ||||
/** | ||||
* Get logger name in current encoding. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void getName(std::string& name) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
* Get logger name. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void getName(std::wstring& name) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
* Get logger name. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void getName(std::basic_string<UniChar>& name) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
* Get logger name. | ||||
* @param name buffer to which name is appended. | ||||
*/ | ||||
void getName(CFStringRef& name) const; | ||||
#endif | ||||
/** | /** | |||
Returns the parent of this logger. Note that the parent of a | Returns the parent of this logger. Note that the parent of a | |||
given logger may change during the lifetime of the logger. | given logger may change during the lifetime of the logger. | |||
<p>The root logger will return <code>0</code>. | <p>The root logger will return <code>0</code>. | |||
*/ | */ | |||
const LoggerPtr& getParent() const; | LoggerPtr getParent() const; | |||
/** | /** | |||
Returns the assigned Level, if any, for this Logger. | Returns the assigned Level, if any, for this Logger. | |||
@return Level - the assigned Level, can be null. | @return Level - the assigned Level, can be null. | |||
*/ | */ | |||
const LevelPtr& getLevel() const; | LevelPtr getLevel() const; | |||
/** | /** | |||
Retrieve a logger by name. | * Retrieve a logger by name in current encoding. | |||
* @param name logger name. | ||||
*/ | */ | |||
static LoggerPtr getLogger(const String& name); | static LoggerPtr getLogger(const std::string& name); | |||
/** | ||||
* Retrieve a logger by name in current encoding. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLogger(const char* const name); | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
* Retrieve a logger by name. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::wstring& name); | ||||
/** | ||||
* Retrieve a logger by name. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLogger(const wchar_t* const name); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
* Retrieve a logger by name. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::basic_string<UniChar>& name); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
* Retrieve a logger by name. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLogger(const CFStringRef& name); | ||||
#endif | ||||
/** | ||||
* Retrieve a logger by name in Unicode. | ||||
* @param name logger name. | ||||
*/ | ||||
static LoggerPtr getLoggerLS(const LogString& name); | ||||
/** | /** | |||
Retrieve the root logger. | Retrieve the root logger. | |||
*/ | */ | |||
static LoggerPtr getRootLogger(); | static LoggerPtr getRootLogger(); | |||
/** | /** | |||
Like #getLogger except that the type of logger | Like #getLogger except that the type of logger | |||
instantiated depends on the type returned by the | instantiated depends on the type returned by the | |||
LoggerFactory#makeNewLoggerInstance method of the | LoggerFactory#makeNewLoggerInstance method of the | |||
<code>factory</code> parameter. | <code>factory</code> parameter. | |||
<p>This method is intended to be used by sub-classes. | <p>This method is intended to be used by sub-classes. | |||
@param name The name of the logger to retrieve. | @param name The name of the logger to retrieve. | |||
@param factory A LoggerFactory implementation that will | @param factory A LoggerFactory implementation that will | |||
actually create a new Instance. | actually create a new Instance. | |||
*/ | */ | |||
static LoggerPtr getLogger(const String& name, | static LoggerPtr getLoggerLS(const LogString& name, | |||
spi::LoggerFactoryPtr factory); | const log4cxx::spi::LoggerFactoryPtr& factory); | |||
/** | ||||
Like #getLogger except that the type of logger | ||||
instantiated depends on the type returned by the | ||||
LoggerFactory#makeNewLoggerInstance method of the | ||||
<code>factory</code> parameter. | ||||
/** | <p>This method is intended to be used by sub-classes. | |||
Return the <em>inherited</em> ResourceBundle for this logger | ||||
. | ||||
This method walks the hierarchy to find the appropriate reso | @param name The name of the logger to retrieve. | |||
urce bundle. | ||||
It will return the resource bundle attached to the closest a | ||||
ncestor of | ||||
this logger, much like the way priorities are searched. In c | ||||
ase there | ||||
is no bundle in the hierarchy then <code>NULL</code> is retu | ||||
rned. | ||||
*/ | ||||
helpers::ResourceBundlePtr getResourceBundle() const; | ||||
protected: | @param factory A LoggerFactory implementation that will | |||
/** | actually create a new Instance. | |||
Returns the string resource coresponding to <code>key</code> | */ | |||
in this | static LoggerPtr getLogger(const std::string& name, | |||
category's inherited resource bundle. | const log4cxx::spi::LoggerFactoryPtr& factory); | |||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Like #getLogger except that the type of logger | ||||
instantiated depends on the type returned by the | ||||
LoggerFactory#makeNewLoggerInstance method of the | ||||
<code>factory</code> parameter. | ||||
If the resource cannot be found, then an {@link #error error | <p>This method is intended to be used by sub-classes. | |||
} message | ||||
will be logged complaining about the missing resource. | ||||
@see #getResourceBundle. | @param name The name of the logger to retrieve. | |||
*/ | ||||
String getResourceBundleString(const String& key) const; | ||||
public: | @param factory A LoggerFactory implementation that will | |||
/** | actually create a new Instance. | |||
Log a message string with the {@link Level#INFO INFO} level. | */ | |||
static LoggerPtr getLogger(const std::wstring& name, | ||||
const log4cxx::spi::LoggerFactoryPtr& factory); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Like #getLogger except that the type of logger | ||||
instantiated depends on the type returned by the | ||||
LoggerFactory#makeNewLoggerInstance method of the | ||||
<code>factory</code> parameter. | ||||
<p>This method is intended to be used by sub-classes. | ||||
@param name The name of the logger to retrieve. | ||||
@param factory A LoggerFactory implementation that will | ||||
actually create a new Instance. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::basic_string<UniChar>& name, | ||||
const log4cxx::spi::LoggerFactoryPtr& factory); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Like #getLogger except that the type of logger | ||||
instantiated depends on the type returned by the | ||||
LoggerFactory#makeNewLoggerInstance method of the | ||||
<code>factory</code> parameter. | ||||
<p>This method is intended to be used by sub-classes. | ||||
@param name The name of the logger to retrieve. | ||||
@param factory A LoggerFactory implementation that will | ||||
actually create a new Instance. | ||||
*/ | ||||
static LoggerPtr getLogger(const CFStringRef& name, | ||||
const log4cxx::spi::LoggerFactoryPtr& factory); | ||||
#endif | ||||
/** | ||||
Return the <em>inherited</em> ResourceBundle for this logger. | ||||
This method walks the hierarchy to find the appropriate resource bu | ||||
ndle. | ||||
It will return the resource bundle attached to the closest ancestor | ||||
of | ||||
this logger, much like the way priorities are searched. In case the | ||||
re | ||||
is no bundle in the hierarchy then <code>NULL</code> is returned. | ||||
*/ | ||||
helpers::ResourceBundlePtr getResourceBundle() const; | ||||
protected: | ||||
/** | ||||
Returns the string resource coresponding to <code>key</code> in thi | ||||
s | ||||
logger's inherited resource bundle. | ||||
If the resource cannot be found, then an {@link #error error} messa | ||||
ge | ||||
will be logged complaining about the missing resource. | ||||
@see #getResourceBundle. | ||||
*/ | ||||
LogString getResourceBundleString(const LogString& key) const; | ||||
public: | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | <p>This method first checks if this logger is <code>INFO</code> | |||
enabled by comparing the level of this logger with the {@link | enabled by comparing the level of this logger with the | |||
Level#INFO INFO} level. If this logger is | INFO level. If this logger is | |||
<code>INFO</code> enabled, it proceeds to call all the | <code>INFO</code> enabled, it proceeds to call all the | |||
registered appenders in this logger and also higher in the | registered appenders in this logger and also higher in the | |||
hierarchy depending on the value of the additivity flag. | hierarchy depending on the value of the additivity flag. | |||
@param message the message string to log. | @param msg the message string to log. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void info(const std::string& msg, const log4cxx::spi::LocationInfo& | |||
void info(const String& message, const char* file=NULL, int line=-1 | location) const; | |||
); | void info(const std::string& msg) const; | |||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Log a message string with the INFO level. | ||||
/** | <p>This method first checks if this logger is <code>INFO</code> | |||
Is the appender passed as parameter attached to this categor | enabled by comparing the level of this logger with the | |||
y? | INFO level. If this logger is | |||
*/ | <code>INFO</code> enabled, it proceeds to call all the | |||
bool isAttached(const AppenderPtr& appender) const; | registered appenders in this logger and also higher in the | |||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void info(const std::wstring& msg, const log4cxx::spi::LocationInfo& | ||||
location) const; | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | ||||
enabled by comparing the level of this logger with the | ||||
INFO level. If this logger is | ||||
<code>INFO</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void info(const std::wstring& msg) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | ||||
enabled by comparing the level of this logger with the | ||||
INFO level. If this logger is | ||||
<code>INFO</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void info(const std::basic_string<UniChar>& msg, const log4cxx::spi | ||||
::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | ||||
enabled by comparing the level of this logger with the | ||||
INFO level. If this logger is | ||||
<code>INFO</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void info(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | ||||
enabled by comparing the level of this logger with the | ||||
INFO level. If this logger is | ||||
<code>INFO</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void info(const CFStringRef& msg, const log4cxx::spi::LocationInfo& | ||||
location) const; | ||||
/** | ||||
Log a message string with the INFO level. | ||||
<p>This method first checks if this logger is <code>INFO</code> | ||||
enabled by comparing the level of this logger with the | ||||
INFO level. If this logger is | ||||
<code>INFO</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void info(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | ||||
Is the appender passed as parameter attached to this logger? | ||||
*/ | ||||
bool isAttached(const AppenderPtr& appender) const; | ||||
/** | /** | |||
* Check whether this logger is enabled for the <code>DEBUG</code> | * Check whether this logger is enabled for the <code>DEBUG</code> | |||
* Level. | * Level. | |||
* | * | |||
* <p> This function is intended to lessen the computational cost o f | * <p> This function is intended to lessen the computational cost o f | |||
* disabled log debug statements. | * disabled log debug statements. | |||
* | * | |||
* <p> For some <code>logger</code> Logger object, when you write, | * <p> For some <code>logger</code> Logger object, when you write, | |||
* <pre> | * <pre> | |||
* logger->debug("debug message"); | * logger->debug("debug message"); | |||
* </pre> | * </pre> | |||
* | * | |||
* <p>You incur the cost constructing the message, concatenation in | * <p>You incur the cost constructing the message, concatenation in | |||
* this case, regardless of whether the message is logged or not. | * this case, regardless of whether the message is logged or not. | |||
* | * | |||
* <p>If you are worried about speed, then you should write | * <p>If you are worried about speed, then you should write | |||
* <pre> | * <pre> | |||
* if(logger->isDebugEnabled()) { | * if(logger->isDebugEnabled()) { | |||
* logger->debug("debug message"); | * logger->debug("debug message"); | |||
* } | * } | |||
* </pre> | * </pre> | |||
* | * | |||
* <p>This way you will not incur the cost of parameter | * <p>This way you will not incur the cost of parameter | |||
* construction if debugging is disabled for <code>logger</code>. O n | * construction if debugging is disabled for <code>logger</code>. O n | |||
* the other hand, if the <code>logger</code> is debug enabled, you | * the other hand, if the <code>logger</code> is debug enabled, you | |||
* will incur the cost of evaluating whether the logger is debug | * will incur the cost of evaluating whether the logger is debug | |||
* enabled twice. Once in <code>isDebugEnabled</code> and once in | * enabled twice. Once in <code>isDebugEnabled</code> and once in | |||
* the <code>debug</code>. This is an insignificant overhead | * the <code>debug</code>. This is an insignificant overhead | |||
* since evaluating a logger takes about 1%% of the time it | * since evaluating a logger takes about 1%% of the time it | |||
* takes to actually log. | * takes to actually log. | |||
skipping to change at line 439 | skipping to change at line 1011 | |||
/** | /** | |||
Check whether this logger is enabled for the fatal Level. | Check whether this logger is enabled for the fatal Level. | |||
See also #isDebugEnabled. | See also #isDebugEnabled. | |||
@return bool - <code>true</code> if this logger is enabled | @return bool - <code>true</code> if this logger is enabled | |||
for level fatal, <code>false</code> otherwise. | for level fatal, <code>false</code> otherwise. | |||
*/ | */ | |||
bool isFatalEnabled() const; | bool isFatalEnabled() const; | |||
/** | /** | |||
Log a localized and parameterized message. | Check whether this logger is enabled for the trace level. | |||
See also #isDebugEnabled. | ||||
First, the user supplied | @return bool - <code>true</code> if this logger is enabled | |||
<code>key</code> is searched in the resource bundle. Next, t | for level trace, <code>false</code> otherwise. | |||
he resulting | */ | |||
pattern is formatted using helpers::StringHelper::format met | bool isTraceEnabled() const; | |||
hod with the user | ||||
supplied object array <code>params</code>. | /** | |||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | @param level The level of the logging request. | |||
@param key The key to be searched in the #resourceBundle. | @param key The key to be searched in the ResourceBundle. | |||
@param file The source file of the logging request, may be null. | @param locationInfo The location info of the logging request. | |||
@param line The number line of the logging request. | @param values The values for the placeholders <code>{0}</code>, | |||
<code>{1}</code> etc. within the pattern. | ||||
@see #setResourceBundle | @see #setResourceBundle | |||
*/ | */ | |||
void l7dlog(const LevelPtr& level, const String& key, | void l7dlog(const LevelPtr& level, const LogString& key, | |||
const char* file, int line, ...); | const log4cxx::spi::LocationInfo& locationInfo, | |||
const std::vector<LogString>& values) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::string& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The first value for the placeholders within the pattern | ||||
. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::string& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::string& val1) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The first value for the placeholders within the pattern | ||||
. | ||||
@param val2 The second value for the placeholders within the patter | ||||
n. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::string& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::string& val1, const std::string& val2) const | ||||
; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@param val3 The value for the third placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::string& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::string& val1, const std::string& val2, const | ||||
std::string& val3) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::wstring& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::wstring& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::wstring& val1) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::wstring& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::wstring& val1, const std::wstring& val2) con | ||||
st; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@param val3 The value for the third placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::wstring& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::wstring& val1, const std::wstring& val2, con | ||||
st std::wstring& val3) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::basic_string<UniChar> | ||||
& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::basic_string<UniChar> | ||||
& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::basic_string<UniChar>& val1) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::basic_string<UniChar> | ||||
& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::basic_string<UniChar>& val1, const std::basi | ||||
c_string<UniChar>& val2) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@param val3 The value for the third placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const std::basic_string<UniChar> | ||||
& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const std::basic_string<UniChar>& val1, const std::basi | ||||
c_string<UniChar>& val2, | ||||
const std::basic_string<UniChar>& val3) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const CFStringRef& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const CFStringRef& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const CFStringRef& val1) const; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const CFStringRef& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const CFStringRef& val1, const CFStringRef& val2) const | ||||
; | ||||
/** | ||||
Log a localized and parameterized message. | ||||
First, the user supplied | ||||
<code>key</code> is searched in the resource bundle. Next, the resu | ||||
lting | ||||
pattern is formatted using helpers::StringHelper::format method wit | ||||
h the user | ||||
supplied string array <code>params</code>. | ||||
@param level The level of the logging request. | ||||
@param key The key to be searched in the ResourceBundle. | ||||
@param locationInfo The location info of the logging request. | ||||
@param val1 The value for the first placeholder within the pattern. | ||||
@param val2 The value for the second placeholder within the pattern | ||||
. | ||||
@param val3 The value for the third placeholder within the pattern. | ||||
@see #setResourceBundle | ||||
*/ | ||||
void l7dlog(const LevelPtr& level, const CFStringRef& key, | ||||
const log4cxx::spi::LocationInfo& locationInfo, | ||||
const CFStringRef& val1, const CFStringRef& val2, | ||||
const CFStringRef& val3) const; | ||||
#endif | ||||
/** | /** | |||
This is the most generic printing method. It is intended to be | This is the most generic printing method. It is intended to be | |||
invoked by <b>wrapper</b> classes. | invoked by <b>wrapper</b> classes. | |||
@param level The level of the logging request. | @param level The level of the logging request. | |||
@param message The message of the logging request. | @param message The message of the logging request. | |||
@param file The source file of the logging request, may be null. | @param location The source file of the logging request, may be null | |||
@param line The number line of the logging request. */ | . */ | |||
void log(const LevelPtr& level, const String& message, | void log(const LevelPtr& level, const std::string& message, | |||
const char* file=0, int line=-1); | const log4cxx::spi::LocationInfo& location) const; | |||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
/** | @param level The level of the logging request. | |||
Remove all previously added appenders from this logger | @param message The message of the logging request. | |||
instance. | */ | |||
<p>This is useful when re-reading configuration information. | void log(const LevelPtr& level, const std::string& message) const; | |||
*/ | #if LOG4CXX_WCHAR_T_API | |||
void removeAllAppenders(); | /** | |||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
/** | @param level The level of the logging request. | |||
Remove the appender passed as parameter form the list of app | @param message The message of the logging request. | |||
enders. | @param location The source file of the logging request, may be null | |||
*/ | . */ | |||
void removeAppender(const AppenderPtr& appender); | void log(const LevelPtr& level, const std::wstring& message, | |||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
/** | @param level The level of the logging request. | |||
Remove the appender with the name passed as parameter form t | @param message The message of the logging request. | |||
he | */ | |||
list of appenders. | void log(const LevelPtr& level, const std::wstring& message) const; | |||
*/ | #endif | |||
void removeAppender(const String& name); | #if LOG4CXX_UNICHAR_API | |||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
@param level The level of the logging request. | ||||
@param message The message of the logging request. | ||||
@param location The source file of the logging request, may be null | ||||
. */ | ||||
void log(const LevelPtr& level, const std::basic_string<UniChar>& m | ||||
essage, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
@param level The level of the logging request. | ||||
@param message The message of the logging request. | ||||
*/ | ||||
void log(const LevelPtr& level, const std::basic_string<UniChar>& m | ||||
essage) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
@param level The level of the logging request. | ||||
@param message The message of the logging request. | ||||
@param location The source file of the logging request, may be null | ||||
. */ | ||||
void log(const LevelPtr& level, const CFStringRef& message, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
@param level The level of the logging request. | ||||
@param message The message of the logging request. | ||||
*/ | ||||
void log(const LevelPtr& level, const CFStringRef& message) const; | ||||
#endif | ||||
/** | ||||
This is the most generic printing method. It is intended to be | ||||
invoked by <b>wrapper</b> classes. | ||||
@param level The level of the logging request. | ||||
@param message The message of the logging request. | ||||
@param location The source file of the logging request, may be null | ||||
. */ | ||||
void logLS(const LevelPtr& level, const LogString& message, | ||||
const log4cxx::spi::LocationInfo& location) const; | ||||
/** | ||||
Remove all previously added appenders from this logger | ||||
instance. | ||||
<p>This is useful when re-reading configuration information. | ||||
*/ | ||||
void removeAllAppenders(); | ||||
/** | ||||
Remove the appender passed as parameter form the list of appenders. | ||||
*/ | ||||
void removeAppender(const AppenderPtr& appender); | ||||
/** | ||||
Remove the appender with the name passed as parameter form the | ||||
list of appenders. | ||||
*/ | ||||
void removeAppender(const LogString& name); | ||||
/** | /** | |||
Set the additivity flag for this Logger instance. | Set the additivity flag for this Logger instance. | |||
*/ | */ | |||
void setAdditivity(bool additive); | void setAdditivity(bool additive); | |||
protected: | protected: | |||
friend class Hierarchy; | friend class Hierarchy; | |||
/** | /** | |||
Only the Hierarchy class can set the hierarchy of a logger.*/ | Only the Hierarchy class can set the hierarchy of a logger.*/ | |||
void setHierarchy(spi::LoggerRepository * repository); | void setHierarchy(spi::LoggerRepository * repository); | |||
public: | public: | |||
/** | /** | |||
Set the level of this Logger. If you are passing any of | Set the level of this Logger. | |||
<code>Level#DEBUG</code>, <code>Level#INFO</code>, | ||||
<code>Level#WARN</code>, <code>Level#ERROR</code>, | ||||
<code>Level#FATAL</code> as a parameter, you need to case them as | ||||
Level. | ||||
<p>As in <pre> logger->setLevel(Level::DEBUG); </ pre> | <p>As in <pre> logger->setLevel(Level::getDebug() ); </pre> | |||
<p>Null values are admitted. */ | <p>Null values are admitted. */ | |||
virtual void setLevel(const LevelPtr& level); | virtual void setLevel(const LevelPtr& level); | |||
/** | /** | |||
Set the resource bundle to be used with localized logging me | Set the resource bundle to be used with localized logging methods. | |||
thod #l7dlog. | */ | |||
*/ | inline void setResourceBundle(const helpers::ResourceBundlePtr& bun | |||
inline void setResourceBundle(const helpers::ResourceBundleP | dle) | |||
tr& bundle) | { resourceBundle = bundle; } | |||
{ resourceBundle = bundle; } | ||||
/** | #if LOG4CXX_WCHAR_T_API | |||
Log a message string with the {@link Level#WARN WARN} level. | /** | |||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</co | <p>This method first checks if this logger is <code>WARN</code> | |||
de> | enabled by comparing the level of this logger with the | |||
enabled by comparing the level of this logger with the {@lin | WARN level. If this logger is | |||
k | <code>WARN</code> enabled, it proceeds to call all the | |||
Level#WARN WARN} level. If this logger is | registered appenders in this logger and also higher in the | |||
<code>WARN</code> enabled, it proceeds to call all the | hierarchy depending on the value of the additivity flag. | |||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param message the message string to log. | @param msg the message string to log. | |||
@param file the file where the log statement was written. | @param location location of source of logging request. | |||
@param line the line where the log statement was written. | */ | |||
*/ | void warn(const std::wstring& msg, const log4cxx::spi::LocationInfo | |||
void warn(const String& message, const char* file=NULL, int | & location) const; | |||
line=-1); | /** | |||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void warn(const std::wstring& msg) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void warn(const std::basic_string<UniChar>& msg, const log4cxx::spi | ||||
::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void warn(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void warn(const CFStringRef& msg, const log4cxx::spi::LocationInfo& | ||||
location) const; | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void warn(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void warn(const std::string& msg, const log4cxx::spi::LocationInfo& | ||||
location) const; | ||||
/** | ||||
Log a message string with the WARN level. | ||||
<p>This method first checks if this logger is <code>WARN</code> | ||||
enabled by comparing the level of this logger with the | ||||
WARN level. If this logger is | ||||
<code>WARN</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void warn(const std::string& msg) const; | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void trace(const std::wstring& msg, const log4cxx::spi::LocationInf | ||||
o& location) const; | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void trace(const std::wstring& msg) const; | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void trace(const std::basic_string<UniChar>& msg, const log4cxx::sp | ||||
i::LocationInfo& location) const; | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void trace(const std::basic_string<UniChar>& msg) const; | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void trace(const CFStringRef& msg, const log4cxx::spi::LocationInfo | ||||
& location) const; | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void trace(const CFStringRef& msg) const; | ||||
#endif | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
@param location location of source of logging request. | ||||
*/ | ||||
void trace(const std::string& msg, const log4cxx::spi::LocationInfo | ||||
& location) const; | ||||
/** | ||||
Log a message string with the TRACE level. | ||||
<p>This method first checks if this logger is <code>TRACE</code> | ||||
enabled by comparing the level of this logger with the | ||||
TRACE level. If this logger is | ||||
<code>TRACE</code> enabled, it proceeds to call all the | ||||
registered appenders in this logger and also higher in the | ||||
hierarchy depending on the value of the additivity flag. | ||||
@param msg the message string to log. | ||||
*/ | ||||
void trace(const std::string& msg) const; | ||||
inline const log4cxx::helpers::Mutex& getMutex() const { return mut | ||||
ex; } | ||||
private: | ||||
// | ||||
// prevent copy and assignment | ||||
Logger(const Logger&); | ||||
Logger& operator=(const Logger&); | ||||
log4cxx::helpers::Mutex mutex; | ||||
friend class log4cxx::helpers::synchronized; | ||||
}; | }; | |||
LOG4CXX_LIST_DEF(LoggerList, LoggerPtr); | ||||
} | } | |||
/** @addtogroup LoggingMacros Logging macros | /** @addtogroup LoggingMacros Logging macros | |||
@{ | @{ | |||
*/ | */ | |||
#if !defined(LOG4CXX_UNLIKELY) | ||||
#if __GNUC__ >= 3 | ||||
/** | ||||
Provides optimization hint to the compiler | ||||
to optimize for the expression being false. | ||||
@param expr boolean expression. | ||||
@returns value of expression. | ||||
*/ | ||||
#define LOG4CXX_UNLIKELY(expr) __builtin_expect(expr, 0) | ||||
#else | ||||
/** | ||||
Provides optimization hint to the compiler | ||||
to optimize for the expression being false. | ||||
@param expr boolean expression. | ||||
@returns value of expression. | ||||
**/ | ||||
#define LOG4CXX_UNLIKELY(expr) expr | ||||
#endif | ||||
#endif | ||||
/** | /** | |||
Logs a message to a specified logger with a specified level. | Logs a message to a specified logger with a specified level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param level the level to log. | @param level the level to log. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_LOG(logger, level, message) { \ | #define LOG4CXX_LOG(logger, level, message) { \ | |||
if (logger->isEnabledFor(level)) {\ | if (logger->isEnabledFor(level)) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(level, oss_.str(oss_ << message), LOG4CXX_LOCA | |||
logger->forcedLog(level, oss.str(), __FILE__, __LINE__); }} | TION); } } | |||
/** | ||||
Logs a message to a specified logger with a specified level. | ||||
@param logger the logger to be used. | ||||
@param level the level to log. | ||||
@param message the message string to log in the internal encoding. | ||||
*/ | ||||
#define LOG4CXX_LOGLS(logger, level, message) { \ | ||||
if (logger->isEnabledFor(level)) {\ | ||||
::log4cxx::helpers::LogCharMessageBuffer oss_; \ | ||||
logger->forcedLog(level, oss_.str(oss_ << message), LOG4CXX_LOCA | ||||
TION); } } | ||||
/** | /** | |||
Logs a message to a specified logger with the DEBUG level. | Logs a message to a specified logger with the DEBUG level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_DEBUG(logger, message) { \ | #define LOG4CXX_DEBUG(logger, message) { \ | |||
if (logger->isDebugEnabled()) {\ | if (LOG4CXX_UNLIKELY(logger->isDebugEnabled())) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(::log4cxx::Level::getDebug(), oss_.str(oss_ << | |||
logger->forcedLog(::log4cxx::Level::DEBUG, oss.str(), __FILE__, __LI | message), LOG4CXX_LOCATION); }} | |||
NE__); }} | ||||
/** | ||||
Logs a message to a specified logger with the TRACE level. | ||||
@param logger the logger to be used. | ||||
@param message the message string to log. | ||||
*/ | ||||
#define LOG4CXX_TRACE(logger, message) { \ | ||||
if (LOG4CXX_UNLIKELY(logger->isTraceEnabled())) {\ | ||||
::log4cxx::helpers::MessageBuffer oss_; \ | ||||
logger->forcedLog(::log4cxx::Level::getTrace(), oss_.str(oss_ << | ||||
message), LOG4CXX_LOCATION); }} | ||||
/** | /** | |||
Logs a message to a specified logger with the INFO level. | Logs a message to a specified logger with the INFO level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_INFO(logger, message) { \ | #define LOG4CXX_INFO(logger, message) { \ | |||
if (logger->isInfoEnabled()) {\ | if (logger->isInfoEnabled()) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(::log4cxx::Level::getInfo(), oss_.str(oss_ << | |||
logger->forcedLog(::log4cxx::Level::INFO, oss.str(), __FILE__, __LIN | message), LOG4CXX_LOCATION); }} | |||
E__); }} | ||||
/** | /** | |||
Logs a message to a specified logger with the WARN level. | Logs a message to a specified logger with the WARN level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_WARN(logger, message) { \ | #define LOG4CXX_WARN(logger, message) { \ | |||
if (logger->isWarnEnabled()) {\ | if (logger->isWarnEnabled()) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(::log4cxx::Level::getWarn(), oss_.str(oss_ << | |||
logger->forcedLog(::log4cxx::Level::WARN, oss.str(), __FILE__, __LIN | message), LOG4CXX_LOCATION); }} | |||
E__); }} | ||||
/** | /** | |||
Logs a message to a specified logger with the ERROR level. | Logs a message to a specified logger with the ERROR level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_ERROR(logger, message) { \ | #define LOG4CXX_ERROR(logger, message) { \ | |||
if (logger->isErrorEnabled()) {\ | if (logger->isErrorEnabled()) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(::log4cxx::Level::getError(), oss_.str(oss_ << | |||
logger->forcedLog(::log4cxx::Level::ERROR, oss.str(), __FILE__, __LI | message), LOG4CXX_LOCATION); }} | |||
NE__); }} | ||||
/** | ||||
Logs a error if the condition is not true. | ||||
@param logger the logger to be used. | ||||
@param condition condition | ||||
@param message the message string to log. | ||||
*/ | ||||
#define LOG4CXX_ASSERT(logger, condition, message) { \ | ||||
if (!(condition) && logger->isErrorEnabled()) {\ | ||||
::log4cxx::helpers::MessageBuffer oss_; \ | ||||
logger->forcedLog(::log4cxx::Level::getError(), oss_.str(oss_ << | ||||
message), LOG4CXX_LOCATION); }} | ||||
/** | /** | |||
Logs a message to a specified logger with the FATAL level. | Logs a message to a specified logger with the FATAL level. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param message the message string to log. | @param message the message string to log. | |||
*/ | */ | |||
#define LOG4CXX_FATAL(logger, message) { \ | #define LOG4CXX_FATAL(logger, message) { \ | |||
if (logger->isFatalEnabled()) {\ | if (logger->isFatalEnabled()) {\ | |||
::log4cxx::StringBuffer oss; \ | ::log4cxx::helpers::MessageBuffer oss_; \ | |||
oss << message; \ | logger->forcedLog(::log4cxx::Level::getFatal(), oss_.str(oss_ << | |||
logger->forcedLog(::log4cxx::Level::FATAL, oss.str(), __FILE__, __LI | message), LOG4CXX_LOCATION); }} | |||
NE__); }} | ||||
/** | /** | |||
Logs a localized message with no parameter. | Logs a localized message with no parameter. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param level the level to log. | @param level the level to log. | |||
@param key the key to be searched in the resourceBundle of the logger. | @param key the key to be searched in the resourceBundle of the logger. | |||
*/ | */ | |||
#define LOG4CXX_L7DLOG(logger, level, key) { \ | #define LOG4CXX_L7DLOG(logger, level, key) { \ | |||
if (logger->isEnabledFor(level)) {\ | if (logger->isEnabledFor(level)) {\ | |||
logger->l7dlog(level, key, __FILE__, __LINE__); }} | logger->l7dlog(level, key, LOG4CXX_LOCATION); }} | |||
/** | /** | |||
Logs a localized message with one parameter. | Logs a localized message with one parameter. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param level the level to log. | @param level the level to log. | |||
@param key the key to be searched in the resourceBundle of the logger. | @param key the key to be searched in the resourceBundle of the logger. | |||
@param p1 the unique parameter. Must be of type (TCHAR *). | @param p1 the unique parameter. | |||
*/ | */ | |||
#define LOG4CXX_L7DLOG1(logger, level, key, p1) { \ | #define LOG4CXX_L7DLOG1(logger, level, key, p1) { \ | |||
if (logger->isEnabledFor(level)) {\ | if (logger->isEnabledFor(level)) {\ | |||
logger->l7dlog(level, key, __FILE__, __LINE__, p1); }} | logger->l7dlog(level, key, LOG4CXX_LOCATION, p1); }} | |||
/** | /** | |||
Logs a localized message with two parameters. | Logs a localized message with two parameters. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param level the level to log. | @param level the level to log. | |||
@param key the key to be searched in the resourceBundle of the logger. | @param key the key to be searched in the resourceBundle of the logger. | |||
@param p1 the first parameter. Must be of type (TCHAR *). | @param p1 the first parameter. | |||
@param p2 the second parameter. Must be of type (TCHAR *). | @param p2 the second parameter. | |||
*/ | */ | |||
#define LOG4CXX_L7DLOG2(logger, level, key, p1, p2) { \ | #define LOG4CXX_L7DLOG2(logger, level, key, p1, p2) { \ | |||
if (logger->isEnabledFor(level)) {\ | if (logger->isEnabledFor(level)) {\ | |||
logger->l7dlog(level, key, __FILE__, __LINE__, p1, p2); }} | logger->l7dlog(level, key, LOG4CXX_LOCATION, p1, p2); }} | |||
/** | /** | |||
Logs a localized message with three parameters. | Logs a localized message with three parameters. | |||
@param logger the logger to be used. | @param logger the logger to be used. | |||
@param level the level to log. | @param level the level to log. | |||
@param key the key to be searched in the resourceBundle of the logger. | @param key the key to be searched in the resourceBundle of the logger. | |||
@param p1 the first parameter. Must be of type (TCHAR *). | @param p1 the first parameter. | |||
@param p2 the second parameter. Must be of type (TCHAR *). | @param p2 the second parameter. | |||
@param p3 the third parameter. Must be of type (TCHAR *). | @param p3 the third parameter. | |||
*/ | */ | |||
#define LOG4CXX_L7DLOG3(logger, level, key, p1, p2, p3) { \ | #define LOG4CXX_L7DLOG3(logger, level, key, p1, p2, p3) { \ | |||
if (logger->isEnabledFor(level)) {\ | if (logger->isEnabledFor(level)) {\ | |||
logger->l7dlog(level, key, __FILE__, __LINE__, p1, p2, p3); }} | logger->l7dlog(level, key, LOG4CXX_LOCATION, p1, p2, p3); }} | |||
/**@}*/ | /**@}*/ | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#include <log4cxx/spi/loggerrepository.h> | ||||
#endif //_LOG4CXX_LOGGER_H | #endif //_LOG4CXX_LOGGER_H | |||
End of changes. 93 change blocks. | ||||
299 lines changed or deleted | 1617 lines changed or added | |||
loggerfactory.h | loggerfactory.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_LOGGERFACTORY_H | #ifndef _LOG4CXX_SPI_LOGGERFACTORY_H | |||
#define _LOG4CXX_SPI_LOGGERFACTORY_H | #define _LOG4CXX_SPI_LOGGERFACTORY_H | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/logger.h> | |||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/tchar.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | ||||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | ||||
namespace spi | namespace spi | |||
{ | { | |||
/** | /** | |||
Implement this interface to create new instances of Logger o | Implement this interface to create new instances of Logger | |||
r | or | |||
a sub-class of Logger. | a sub-class of Logger. | |||
*/ | */ | |||
class LOG4CXX_EXPORT LoggerFactory : public virtual helpers: | class LOG4CXX_EXPORT LoggerFactory : public virtual helpers | |||
:Object | ::Object | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(LoggerFactory) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(LoggerFactory) | |||
virtual ~LoggerFactory() {} | virtual ~LoggerFactory() {} | |||
virtual LoggerPtr makeNewLoggerInstance(const String | virtual LoggerPtr makeNewLoggerInstance( | |||
& name) = 0; | log4cxx::helpers::Pool& pool, | |||
}; | const LogString& name) const = 0; | |||
}; | ||||
typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | ||||
} // namespace spi | } // namespace spi | |||
}; // namesapce log4cxx | } // namesapce log4cxx | |||
#endif //_LOG4CXX_SPI_LOGGERFACTORY_H | #endif //_LOG4CXX_SPI_LOGGERFACTORY_H | |||
End of changes. 5 change blocks. | ||||
30 lines changed or deleted | 26 lines changed or added | |||
loggerrepository.h | loggerrepository.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_LOG_REPOSITORY_H | #ifndef _LOG4CXX_SPI_LOG_REPOSITORY_H | |||
#define _LOG4CXX_SPI_LOG_REPOSITORY_H | #define _LOG4CXX_SPI_LOG_REPOSITORY_H | |||
#include <log4cxx/helpers/objectptr.h> | #if defined(_MSC_VER) | |||
#include <log4cxx/helpers/object.h> | #pragma warning ( push ) | |||
#include <log4cxx/helpers/tchar.h> | #pragma warning ( disable: 4231 4251 4275 4786 ) | |||
#include <vector> | #endif | |||
#include <log4cxx/appender.h> | ||||
#include <log4cxx/spi/loggerfactory.h> | ||||
#include <log4cxx/level.h> | ||||
#include <log4cxx/spi/hierarchyeventlistener.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Level; | namespace spi | |||
typedef helpers::ObjectPtrT<Level> LevelPtr; | { | |||
class Logger; | ||||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | ||||
typedef std::vector<LoggerPtr> LoggerList; | ||||
class Appender; | /** | |||
typedef log4cxx::helpers::ObjectPtrT<Appender> AppenderPtr; | A <code>LoggerRepository</code> is used to create and retrieve | |||
<code>Loggers</code>. The relation between loggers in a reposit | ||||
ory | ||||
depends on the repository but typically loggers are arranged in | ||||
a | ||||
named hierarchy. | ||||
namespace spi | <p>In addition to the creational methods, a | |||
{ | <code>LoggerRepository</code> can be queried for existing logge | |||
class HierarchyEventListener; | rs, | |||
typedef log4cxx::helpers::ObjectPtrT<HierarchyEventListener> | can act as a point of registry for events related to loggers. | |||
HierarchyEventListenerPtr; | */ | |||
class LOG4CXX_EXPORT LoggerRepository : public virtual helpers: | ||||
:Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(LoggerRepository) | ||||
virtual ~LoggerRepository() {} | ||||
class LoggerFactory; | /** | |||
typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | Add a {@link spi::HierarchyEventListener HierarchyEventList | |||
ener} | ||||
event to the repository. | ||||
*/ | ||||
virtual void addHierarchyEventListener(const HierarchyEvent | ||||
ListenerPtr& | ||||
listener) = 0; | ||||
/** | ||||
Is the repository disabled for a given level? The answer de | ||||
pends | ||||
on the repository threshold and the <code>level</code> | ||||
parameter. See also #setThreshold method. */ | ||||
virtual bool isDisabled(int level) const = 0; | ||||
class LoggerRepository; | /** | |||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | Set the repository-wide threshold. All logging requests bel | |||
ryPtr; | ow the | |||
threshold are immediately dropped. By default, the threshol | ||||
d is | ||||
set to <code>Level::getAll()</code> which has the lowest po | ||||
ssible rank. */ | ||||
virtual void setThreshold(const LevelPtr& level) = 0; | ||||
/** | /** | |||
A <code>LoggerRepository</code> is used to create and retrie | Another form of {@link #setThreshold(const LevelPtr&) | |||
ve | setThreshold} accepting a string | |||
<code>Loggers</code>. The relation between loggers in a repository | parameter instead of a <code>Level</code>. */ | |||
depends on the repository but typically loggers are arranged in a | virtual void setThreshold(const LogString& val) = 0; | |||
named hierarchy. | ||||
<p>In addition to the creational methods, a | virtual void emitNoAppenderWarning(const LoggerPtr& logger) | |||
<code>LoggerRepository</code> can be queried for existing loggers, | = 0; | |||
can act as a point of registry for events related to loggers. | ||||
*/ | ||||
class LOG4CXX_EXPORT LoggerRepository : public virtual helpers::Obj | ||||
ect | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(LoggerRepository) | ||||
virtual ~LoggerRepository() {} | ||||
/** | /** | |||
Add a {@link spi::HierarchyEventListener HierarchyEventListener | Get the repository-wide threshold. See {@link | |||
} | #setThreshold(const LevelPtr&) setThreshold} | |||
event to the repository. | for an explanation. */ | |||
*/ | virtual const LevelPtr& getThreshold() const = 0; | |||
virtual void addHierarchyEventListener(const HierarchyEventList | ||||
enerPtr& | ||||
listener) = 0; | ||||
/** | ||||
Is the repository disabled for a given level? The answer depend | ||||
s | ||||
on the repository threshold and the <code>level</code> | ||||
parameter. See also #setThreshold method. */ | ||||
virtual bool isDisabled(int level) const = 0; | ||||
/** | virtual LoggerPtr getLogger(const LogString& name) = 0; | |||
Set the repository-wide threshold. All logging requests below t | ||||
he | ||||
threshold are immediately dropped. By default, the threshold is | ||||
set to <code>Level::ALL</code> which has the lowest possible ra | ||||
nk. */ | ||||
virtual void setThreshold(const LevelPtr& level) = 0; | ||||
/** | virtual LoggerPtr getLogger(const LogString& name, | |||
Another form of {@link #setThreshold(const LevelPtr&) | const spi::LoggerFactoryPtr& factory) = 0; | |||
setThreshold} accepting a string | ||||
parameter instead of a <code>Level</code>. */ | ||||
virtual void setThreshold(const String& val) = 0; | ||||
virtual void emitNoAppenderWarning(const LoggerPtr& logger) = 0 ; | virtual LoggerPtr getRootLogger() const = 0; | |||
/** | virtual LoggerPtr exists(const LogString& name) = 0; | |||
Get the repository-wide threshold. See {@link | ||||
#setThreshold(const LevelPtr&) setThreshold} | ||||
for an explanation. */ | ||||
virtual const LevelPtr& getThreshold() const = 0; | ||||
virtual LoggerPtr getLogger(const String& name) = 0; | virtual void shutdown() = 0; | |||
virtual LoggerPtr getLogger(const String& name, spi::LoggerFact | virtual LoggerList getCurrentLoggers() const = 0; | |||
oryPtr | ||||
factory) = 0; | ||||
virtual LoggerPtr getRootLogger() const = 0; | virtual void fireAddAppenderEvent(const LoggerPtr& logger, | |||
const AppenderPtr& appender) = 0; | ||||
virtual LoggerPtr exists(const String& name) = 0; | virtual void resetConfiguration() = 0; | |||
virtual void shutdown() = 0; | virtual bool isConfigured() = 0; | |||
virtual void setConfigured(bool configured) = 0; | ||||
virtual LoggerList getCurrentLoggers() const = 0; | }; // class LoggerRepository | |||
virtual void fireAddAppenderEvent(const LoggerPtr& logger, | } // namespace spi | |||
const AppenderPtr& appender) = 0; | } // namespace log4cxx | |||
virtual void resetConfiguration() = 0; | #if defined(_MSC_VER) | |||
}; // class LoggerRepository | #pragma warning ( pop ) | |||
} // namespace spi | #endif | |||
}; // namespace log4cxx | ||||
#endif //_LOG4CXX_SPI_LOG_REPOSITORY_H | #endif //_LOG4CXX_SPI_LOG_REPOSITORY_H | |||
End of changes. 22 change blocks. | ||||
90 lines changed or deleted | 87 lines changed or added | |||
loggingevent.h | loggingevent.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_LOGGING_EVENT_H | #ifndef _LOG4CXX_SPI_LOGGING_EVENT_H | |||
#define _LOG4CXX_SPI_LOGGING_EVENT_H | #define _LOG4CXX_SPI_LOGGING_EVENT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning (push) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <time.h> | #include <time.h> | |||
#include <log4cxx/logger.h> | #include <log4cxx/logger.h> | |||
#include <log4cxx/mdc.h> | #include <log4cxx/mdc.h> | |||
#include <set> | #include <log4cxx/spi/location/locationinfo.h> | |||
#include <vector> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | namespace helpers | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | { | |||
class ObjectOutputStream; | ||||
class Level; | } | |||
namespace helpers | ||||
{ | ||||
class SocketOutputStream; | ||||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | ||||
StreamPtr; | ||||
class SocketInputStream; | ||||
typedef helpers::ObjectPtrT<SocketInputStream> SocketInputSt | ||||
reamPtr; | ||||
} | ||||
namespace spi | ||||
{ | ||||
class LoggingEvent; | ||||
/** smart pointer to a LoggingEvent class */ | ||||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | ||||
/** | ||||
The internal representation of logging events. When an affir | ||||
mative | ||||
decision is made to log then a <code>LoggingEvent</code> ins | ||||
tance | ||||
is created. This instance is passed around to the different | ||||
log4cxx | ||||
components. | ||||
<p>This class is of concern to those wishing to extend log4c | ||||
xx. | ||||
*/ | ||||
class LOG4CXX_EXPORT LoggingEvent : | ||||
public virtual helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(LoggingEvent) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(LoggingEvent) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** For serialization only | ||||
*/ | ||||
LoggingEvent(); | ||||
/** | namespace spi | |||
Instantiate a LoggingEvent from the supplied paramet | { | |||
ers. | ||||
<p>Except #timeStamp all the other fields of | /** | |||
<code>LoggingEvent</code> are filled when actually n | The internal representation of logging events. When an affi | |||
eeded. | rmative | |||
<p> | decision is made to log then a <code>LoggingEvent</code> in | |||
@param fqnOfLoggerClass The fully qualified name of | stance | |||
the calling | is created. This instance is passed around to the different | |||
logger class. | log4cxx | |||
@param logger The logger of this event. | components. | |||
@param level The level of this event. | ||||
@param message The message of this event. | ||||
@param file The file where this log statement was wr | ||||
itten. | ||||
@param line The line where this log statement was wr | ||||
itten. | ||||
*/ | ||||
LoggingEvent(const String& fqnOfLoggerClass, | ||||
const LoggerPtr& logger, | ||||
const LevelPtr& level, const String& messag | ||||
e, | ||||
const char* file=0, int line=-1); | ||||
~LoggingEvent(); | <p>This class is of concern to those wishing to extend log4 | |||
cxx. | ||||
*/ | ||||
class LOG4CXX_EXPORT LoggingEvent : | ||||
public virtual helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(LoggingEvent) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(LoggingEvent) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** Return the #level of this event. */ | /** For serialization only | |||
inline const LevelPtr& getLevel() const | */ | |||
{ return level; } | LoggingEvent(); | |||
/** Return the name of the #logger. */ | /** | |||
const String& getLoggerName() const; | Instantiate a LoggingEvent from the supplied parame | |||
ters. | ||||
/** Return the #message for this logging event. */ | <p>Except timeStamp all the other fields of | |||
inline const String& getMessage() const | <code>LoggingEvent</code> are filled when actually | |||
{ return message; } | needed. | |||
<p> | ||||
@param logger The logger of this event. | ||||
@param level The level of this event. | ||||
@param message The message of this event. | ||||
@param location location of logging request. | ||||
*/ | ||||
LoggingEvent(const LogString& logger, | ||||
const LevelPtr& level, const LogString& m | ||||
essage, | ||||
const log4cxx::spi::LocationInfo& location) | ||||
; | ||||
/** Return the #message for this logging event. */ | ~LoggingEvent(); | |||
inline const String& getRenderedMessage() const | ||||
{ return message; } | ||||
/**Returns the time when the application started, | /** Return the level of this event. */ | |||
in seconds elapsed since 01.01.1970. | inline const LevelPtr& getLevel() const | |||
*/ | { return level; } | |||
static int64_t getStartTime() | ||||
{ return startTime; } | ||||
/** Return the #threadId of this event. */ | /** Return the name of the logger. */ | |||
inline unsigned long getThreadId() const | inline const LogString& getLoggerName() const { | |||
{ return threadId; } | return logger; | |||
} | ||||
/** Return the #timeStamp of this event. */ | /** Return the message for this logging event. */ | |||
inline int64_t getTimeStamp() const | inline const LogString& getMessage() const | |||
{ return timeStamp; } | { return message; } | |||
/* Return the file where this log statement was writ | /** Return the message for this logging event. */ | |||
ten. */ | inline const LogString& getRenderedMessage() const | |||
inline char * getFile() const | { return message; } | |||
{ return file; } | ||||
/* Return the line where this log statement was writ | /**Returns the time when the application started, | |||
ten. */ | in seconds elapsed since 01.01.1970. | |||
inline int getLine() const | */ | |||
{ return line; } | static log4cxx_time_t getStartTime(); | |||
/** | /** Return the threadName of this event. */ | |||
* This method returns the NDC for this event. It wil | inline const LogString& getThreadName() const { | |||
l return the | return threadName; | |||
* correct content even if the event was generated in | } | |||
a different | ||||
* thread or even on a different machine. The NDC#get | ||||
method | ||||
* should <em>never</em> be called directly. */ | ||||
const String& getNDC() const; | ||||
/** Write this event to a helpers::SocketOutputStrea | /** Return the timeStamp of this event. */ | |||
m. */ | inline log4cxx_time_t getTimeStamp() const | |||
void write(helpers::SocketOutputStreamPtr& os) const | { return timeStamp; } | |||
; | ||||
void writeLevel(helpers::SocketOutputStreamPtr& os) | /* Return the file where this log statement was wri | |||
const; | tten. */ | |||
inline const log4cxx::spi::LocationInfo& getLocatio | ||||
nInformation() const | ||||
{ return locationInfo; } | ||||
/** Read this event from a helpers::SocketOutputStre | /** | |||
am. */ | * This method appends the NDC for this event to pas | |||
void read(const helpers::SocketInputStreamPtr& is); | sed string. It will return the | |||
* correct content even if the event was generated i | ||||
n a different | ||||
* thread or even on a different machine. The NDC#ge | ||||
t method | ||||
* should <em>never</em> be called directly. | ||||
* | ||||
* @param dest destination for NDC, unchanged if NDC | ||||
is not set. | ||||
* @return true if NDC is set. | ||||
*/ | ||||
bool getNDC(LogString& dest) const; | ||||
void readLevel(const helpers::SocketInputStreamPtr& | /** | |||
is); | * Writes the content of the LoggingEvent | |||
* in a format compatible with log4j's serialized | ||||
form. | ||||
*/ | ||||
void write(helpers::ObjectOutputStream& os, helpers | ||||
::Pool& p) const; | ||||
/** | /** | |||
* Returns the the context corresponding to the <code | * Appends the the context corresponding to the <cod | |||
>key</code> parameter. | e>key</code> parameter. | |||
* If there is a local MDC copy, possibly because we | * If there is a local MDC copy, possibly because we | |||
are in a logging | are in a logging | |||
* server or running inside AsyncAppender, then we se | * server or running inside AsyncAppender, then we s | |||
arch for the key in | earch for the key in | |||
* MDC copy, if a value is found it is returned. Othe | * MDC copy, if a value is found it is returned. Oth | |||
rwise, if the search | erwise, if the search | |||
* in MDC copy returns an empty result, then the curr | * in MDC copy returns an empty result, then the cur | |||
ent thread's | rent thread's | |||
* <code>MDC</code> is used. | * <code>MDC</code> is used. | |||
* | * | |||
* <p> | * <p> | |||
* Note that <em>both</em> the local MDC copy and the | * Note that <em>both</em> the local MDC copy and th | |||
current thread's MDC | e current thread's MDC | |||
* are searched. | * are searched. | |||
* </p> | * </p> | |||
*/ | * @param key key. | |||
String getMDC(const String& key) const; | * @param dest string to which value, if any, is app | |||
ended. | ||||
* @return true if key had a corresponding value. | ||||
*/ | ||||
bool getMDC(const LogString& key, LogString& dest) | ||||
const; | ||||
/** | LOG4CXX_LIST_DEF(KeySet, LogString); | |||
* Returns the set of of the key values in the MDC fo | /** | |||
r the event. | * Returns the set of of the key values in the MDC f | |||
* The returned set is unmodifiable by the caller. | or the event. | |||
* | * The returned set is unmodifiable by the caller. | |||
* @return Set an unmodifiable set of the MDC keys. | * | |||
* @since 1.3 | * @return Set an unmodifiable set of the MDC keys. | |||
*/ | * | |||
std::set<String> getMDCKeySet() const; | */ | |||
KeySet getMDCKeySet() const; | ||||
/** | /** | |||
Obtain a copy of this thread's MDC prior to serializ | Obtain a copy of this thread's MDC prior to seriali | |||
ation | zation | |||
or asynchronous logging. | or asynchronous logging. | |||
*/ | */ | |||
void getMDCCopy() const; | void getMDCCopy() const; | |||
/** | /** | |||
* Return a previously set property. The return value | * Return a previously set property. | |||
can be null. | * @param key key. | |||
*/ | * @param dest string to which value, if any, is app | |||
String getProperty(const String& key) const; | ended. | |||
/** | * @return true if key had a corresponding value. | |||
* Returns the set of of the key values in the proper | */ | |||
ties | bool getProperty(const LogString& key, LogString& d | |||
* for the event. The returned set is unmodifiable by | est) const; | |||
the caller. | /** | |||
* | * Returns the set of of the key values in the prope | |||
* @return Set an unmodifiable set of the property ke | rties | |||
ys. | * for the event. The returned set is unmodifiable b | |||
*/ | y the caller. | |||
std::set<String> getPropertyKeySet() const; | * | |||
* @return Set an unmodifiable set of the property k | ||||
eys. | ||||
*/ | ||||
KeySet getPropertyKeySet() const; | ||||
/** | /** | |||
* Set a string property using a key and a string val | * Set a string property using a key and a string va | |||
ue. since 1.3 | lue. since 1.3 | |||
*/ | */ | |||
void setProperty(const String& key, const String& va | void setProperty(const LogString& key, const LogStr | |||
lue); | ing& value); | |||
public: | private: | |||
/** | /** | |||
* Fully qualified name of the calling category class | * The logger of the logging event. | |||
. | **/ | |||
*/ | LogString logger; | |||
String fqnOfCategoryClass; | ||||
private: | /** level of logging event. */ | |||
/** | LevelPtr level; | |||
* The logger of the logging event. This field is not | ||||
serialized for | ||||
* performance reasons. | ||||
* | ||||
* <p> | ||||
* It is set by the LoggingEvent constructor or set b | ||||
y a remote | ||||
* entity after deserialization. | ||||
**/ | ||||
LoggerPtr logger; | ||||
/** level of logging event. */ | /** The nested diagnostic context (NDC) of logging | |||
LevelPtr level; | event. */ | |||
mutable LogString* ndc; | ||||
/** The nested diagnostic context (NDC) of logging e | /** The mapped diagnostic context (MDC) of logging | |||
vent. */ | event. */ | |||
String ndc; | mutable MDC::Map* mdcCopy; | |||
/** The mapped diagnostic context (MDC) of logging e | /** | |||
vent. */ | * A map of String keys and String values. | |||
MDC::Map mdcCopy; | */ | |||
std::map<LogString, LogString> * properties; | ||||
/** | /** Have we tried to do an NDC lookup? If we did, t | |||
* A map of String keys and String values. | here is no need | |||
*/ | * to do it again. Note that its value is always f | |||
std::map<String, String> * properties; | alse when | |||
* serialized. Thus, a receiving SocketNode will ne | ||||
ver use it's own | ||||
* (incorrect) NDC. See also writeObject method. | ||||
*/ | ||||
mutable bool ndcLookupRequired; | ||||
/** Have we tried to do an NDC lookup? If we did, th | /** | |||
ere is no need | * Have we tried to do an MDC lookup? If we did, the | |||
* to do it again. Note that its value is always fa | re is no need to do it | |||
lse when | * again. Note that its value is always false when | |||
* serialized. Thus, a receiving SocketNode will nev | serialized. See also | |||
er use it's own | * the getMDC and getMDCCopy methods. | |||
* (incorrect) NDC. See also writeObject method. | */ | |||
*/ | mutable bool mdcCopyLookupRequired; | |||
bool ndcLookupRequired; | ||||
/** | /** The application supplied message of logging eve | |||
* Have we tried to do an MDC lookup? If we did, ther | nt. */ | |||
e is no need to do it | LogString message; | |||
* again. Note that its value is always false when s | ||||
erialized. See also | ||||
* the getMDC and getMDCCopy methods. | ||||
*/ | ||||
bool mdcCopyLookupRequired; | ||||
/** The application supplied message of logging even | /** The number of milliseconds elapsed from 1/1/197 | |||
t. */ | 0 until logging event | |||
String message; | was created. */ | |||
log4cxx_time_t timeStamp; | ||||
/** The name of thread in which this logging event was generate | /** The is the location where this log statement wa | |||
d. */ | s written. */ | |||
//const LOG4CPLUS_THREAD_KEY_TYPE thread; | const log4cxx::spi::LocationInfo locationInfo; | |||
/** The number of milliseconds elapsed from 1/1/1970 until logg | /** The identifier of thread in which this logging | |||
ing event | event | |||
was created. */ | was generated. | |||
int64_t timeStamp; | */ | |||
const LogString threadName; | ||||
/** The is the file where this log statement was wri | // | |||
tten. */ | // prevent copy and assignment | |||
char* file; | // | |||
std::string fileFromStream; | LoggingEvent(const LoggingEvent&); | |||
LoggingEvent& operator=(const LoggingEvent&); | ||||
static const LogString getCurrentThreadName(); | ||||
/** The is the line where this log statement was wri | static void writeProlog(log4cxx::helpers::ObjectOutp | |||
tten. */ | utStream& os, log4cxx::helpers::Pool& p); | |||
int line; | ||||
/** The identifier of thread in which this logging e | }; | |||
vent | ||||
was generated. | ||||
*/ | ||||
unsigned long threadId; | ||||
static int64_t startTime; | LOG4CXX_PTR_DEF(LoggingEvent); | |||
}; | LOG4CXX_LIST_DEF(LoggingEventList, LoggingEventPtr); | |||
} | } | |||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif //_LOG4CXX_SPI_LOGGING_EVENT_H | #endif //_LOG4CXX_SPI_LOGGING_EVENT_H | |||
End of changes. 43 change blocks. | ||||
255 lines changed or deleted | 241 lines changed or added | |||
loglog.h | loglog.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_LOG_LOG_H | #ifndef _LOG4CXX_HELPERS_LOG_LOG_H | |||
#define _LOG4CXX_HELPERS_LOG_LOG_H | #define _LOG4CXX_HELPERS_LOG_LOG_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/mutex.h> | |||
#include <exception> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
This class used to output log statements from within the log | This class used to output log statements from within the lo | |||
4cxx package. | g4cxx package. | |||
<p>Log4cxx components cannot make log4cxx logging calls. How | ||||
ever, it is | ||||
sometimes useful for the user to learn about what log4cxx is | ||||
doing. You can enable log4cxx internal logging by calling th | ||||
e | ||||
<b>#setInternalDebugging</b> method. | ||||
<p>All log4cxx internal debug calls go to standard output | ||||
where as internal error messages are sent to | ||||
standard error output. All internal messages are prepended w | ||||
ith | ||||
the string "log4cxx: ". | ||||
*/ | ||||
class LOG4CXX_EXPORT LogLog | ||||
{ | ||||
public: | ||||
/** | ||||
Defining this value makes log4j print log4j-internal | ||||
debug | ||||
statements to <code>System.out</code>. | ||||
<p> The value of this string is <b>log4j.debug</b>. | <p>Log4cxx components cannot make log4cxx logging calls. Ho | |||
wever, it is | ||||
sometimes useful for the user to learn about what log4cxx i | ||||
s | ||||
doing. You can enable log4cxx internal logging by calling t | ||||
he | ||||
<b>#setInternalDebugging</b> method. | ||||
<p>Note that the search for all option names is case | <p>All log4cxx internal debug calls go to standard output | |||
sensitive. */ | where as internal error messages are sent to | |||
static String DEBUG_KEY; | standard error output. All internal messages are prepended | |||
with | ||||
the string "log4cxx: ". | ||||
*/ | ||||
class LOG4CXX_EXPORT LogLog | ||||
{ | ||||
private: | ||||
bool debugEnabled; | ||||
protected: | /** | |||
static bool debugEnabled; | In quietMode not even errors generate any output. | |||
*/ | ||||
bool quietMode; | ||||
Mutex mutex; | ||||
LogLog(); | ||||
LogLog(const LogLog&); | ||||
LogLog& operator=(const LogLog&); | ||||
static LogLog& getInstance(); | ||||
/** | public: | |||
In quietMode not even errors generate any output. | /** | |||
*/ | Allows to enable/disable log4cxx internal logging. | |||
static bool quietMode; | */ | |||
static void setInternalDebugging(bool enabled); | ||||
public: | /** | |||
/** | This method is used to output log4cxx internal debu | |||
Allows to enable/disable log4cxx internal logging. | g | |||
*/ | statements. Output goes to the standard output. | |||
static void setInternalDebugging(bool enabled); | */ | |||
static void debug(const LogString& msg); | ||||
static void debug(const LogString& msg, const std:: | ||||
exception& e); | ||||
/** | /** | |||
This method is used to output log4cxx internal debug | This method is used to output log4cxx internal erro | |||
statements. Output goes to the standard output. | r | |||
*/ | statements. There is no way to disable error statem | |||
static void debug(const String& msg); | ents. | |||
static void debug(const String& msg, Exception& e); | Output goes to stderr. | |||
*/ | ||||
static void error(const LogString& msg); | ||||
static void error(const LogString& msg, const std:: | ||||
exception& e); | ||||
/** | /** | |||
This method is used to output log4cxx internal error | In quiet mode LogLog generates strictly no output, | |||
statements. There is no way to disable error stateme | not even | |||
nts. | for errors. | |||
Output goes to stderr. | ||||
*/ | ||||
static void error(const String& msg); | ||||
static void error(const String& msg, Exception& e); | ||||
/** | @param quietMode <code>true</code> for no output. | |||
In quite mode LogLog generates strictly no output, n | */ | |||
ot even | static void setQuietMode(bool quietMode); | |||
for errors. | ||||
@param quietMode <code>true</code> for no output. | /** | |||
*/ | This method is used to output log4cxx internal warn | |||
static void setQuietMode(bool quietMode); | ing | |||
statements. There is no way to disable warning stat | ||||
ements. | ||||
Output goes to stderr. | ||||
*/ | ||||
static void warn(const LogString& msg); | ||||
static void warn(const LogString& msg, const std:: | ||||
exception& e); | ||||
/** | private: | |||
This method is used to output log4cxx internal warni | static void emit(const LogString& msg); | |||
ng | static void emit(const std::exception& ex); | |||
statements. There is no way to disable warning state | }; | |||
ments. | } // namespace helpers | |||
Output goes to stderr. | } // namespace log4cxx | |||
*/ | ||||
static void warn(const String& msg); | ||||
static void warn(const String& msg, Exception& e); | ||||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#define LOGLOG_DEBUG(log) { \ | #define LOGLOG_DEBUG(log) { \ | |||
StringBuffer oss; \ | log4cxx::helpers::LogLog::debug(log) ; } | |||
oss << log; \ | ||||
log4cxx::helpers::LogLog::debug(oss.str()) ; } | ||||
#define LOGLOG_WARN(log) { \ | #define LOGLOG_WARN(log) { \ | |||
StringBuffer oss; \ | log4cxx::helpers::LogLog::warn(log) ; } | |||
oss << log; \ | ||||
log4cxx::helpers::LogLog::warn(oss.str()) ; } | ||||
#define LOGLOG_ERROR(log) { \ | #define LOGLOG_ERROR(log) { \ | |||
StringBuffer oss; \ | log4cxx::helpers::LogLog::warn(log); } | |||
oss << log; \ | ||||
log4cxx::helpers::LogLog::warn(oss.str()); } | ||||
#endif //_LOG4CXX_HELPERS_LOG_LOG_H | #endif //_LOG4CXX_HELPERS_LOG_LOG_H | |||
End of changes. 16 change blocks. | ||||
90 lines changed or deleted | 89 lines changed or added | |||
logmanager.h | logmanager.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_LOG_MANAGER_H | #ifndef _LOG4CXX_LOG_MANAGER_H | |||
#define _LOG4CXX_LOG_MANAGER_H | #define _LOG4CXX_LOG_MANAGER_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <vector> | #include <vector> | |||
#include <log4cxx/spi/repositoryselector.h> | #include <log4cxx/spi/repositoryselector.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | class Logger; | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | typedef helpers::ObjectPtrT<Logger> LoggerPtr; | |||
typedef std::vector<LoggerPtr> LoggerList; | typedef std::vector<LoggerPtr> LoggerList; | |||
namespace spi | namespace spi { | |||
{ | class LoggerFactory; | |||
class LoggerFactory; | typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | |||
typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | ||||
} | } | |||
/** | /** | |||
* Use the <code>LogManager</code> class to retreive Logger | * Use the <code>LogManager</code> class to retreive Logger | |||
* instances or to operate on the current {@link spi::LoggerRepository | * instances or to operate on the current | |||
* LoggerRepository}. When the <code>LogManager</code> class is loade | * {@link log4cxx::spi::LoggerRepository LoggerRepository}. | |||
d | * When the <code>LogManager</code> class is loaded | |||
* into memory the default initialization procedure is inititated. | * into memory the default initialization procedure is inititated. | |||
*/ | */ | |||
class LOG4CXX_EXPORT LogManager | class LOG4CXX_EXPORT LogManager | |||
{ | { | |||
private: | private: | |||
static void * guard; | static void * guard; | |||
static spi::RepositorySelectorPtr repositorySelector; | static spi::RepositorySelectorPtr& getRepositorySelector(); | |||
public: | public: | |||
/** | /** | |||
Sets <code>LoggerFactory</code> but only if the correct | Sets <code>LoggerFactory</code> but only if the correct | |||
<em>guard</em> is passed as parameter. | <em>guard</em> is passed as parameter. | |||
<p>Initally the guard is null. If the guard is | <p>Initally the guard is null. If the guard is | |||
<code>null</code>, then invoking this method sets the logger | <code>null</code>, then invoking this method sets the logger | |||
factory and the guard. Following invocations will throw a {@link | factory and the guard. Following invocations will throw a {@link | |||
helpers::IllegalArgumentException IllegalArgumentException}, | helpers::IllegalArgumentException IllegalArgumentException}, | |||
unless the previously set <code>guard</code> is passed as th | unless the previously set <code>guard</code> is passed as t | |||
e second | he second | |||
parameter. | parameter. | |||
<p>This allows a high-level component to set the {@link | <p>This allows a high-level component to set the {@link | |||
spi::RepositorySelector RepositorySelector} used by the | spi::RepositorySelector RepositorySelector} used by the | |||
<code>LogManager</code>. | <code>LogManager</code>. | |||
*/ | */ | |||
static void setRepositorySelector(spi::RepositorySelectorPtr select or, | static void setRepositorySelector(spi::RepositorySelectorPtr select or, | |||
void * guard); | void * guard); | |||
static spi::LoggerRepositoryPtr& getLoggerRepository(); | static spi::LoggerRepositoryPtr& getLoggerRepository(); | |||
/** | /** | |||
Retrieve the appropriate root logger. | Retrieve the appropriate root logger. | |||
*/ | */ | |||
static LoggerPtr getRootLogger(); | static LoggerPtr getRootLogger(); | |||
/** | /** | |||
Retrieve the appropriate Logger instance. | Retrieve the appropriate Logger instance. | |||
* @param name logger name in current encoding. | ||||
* @return logger. | ||||
*/ | */ | |||
static LoggerPtr getLogger(const String& name); | static LoggerPtr getLogger(const std::string& name); | |||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name in current encoding. | ||||
* @param factory logger factory. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::string& name, | ||||
const spi::LoggerFactoryPtr& factory); | ||||
/** | ||||
* Determines if logger name exists in the hierarchy. | ||||
* @param name logger name. | ||||
* @return true if logger exists. | ||||
*/ | ||||
static LoggerPtr exists(const std::string& name); | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::wstring& name); | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @param factory logger factory. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::wstring& name, | ||||
const spi::LoggerFactoryPtr& factory); | ||||
/** | ||||
* Determines if logger name exists in the hierarchy. | ||||
* @param name logger name. | ||||
* @return true if logger exists. | ||||
*/ | ||||
static LoggerPtr exists(const std::wstring& name); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::basic_string<UniChar>& name); | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @param factory logger factory. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const std::basic_string<UniChar>& name, | ||||
const spi::LoggerFactoryPtr& factory); | ||||
/** | ||||
* Determines if logger name exists in the hierarchy. | ||||
* @param name logger name. | ||||
* @return true if logger exists. | ||||
*/ | ||||
static LoggerPtr exists(const std::basic_string<UniChar>& name); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const CFStringRef& name); | ||||
/** | ||||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @param factory logger factory. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLogger(const CFStringRef& name, | ||||
const spi::LoggerFactoryPtr& factory); | ||||
/** | ||||
* Determines if logger name exists in the hierarchy. | ||||
* @param name logger name. | ||||
* @return true if logger exists. | ||||
*/ | ||||
static LoggerPtr exists(const CFStringRef& name); | ||||
#endif | ||||
/** | /** | |||
Retrieve the appropriate Logger instance. | Retrieve the appropriate Logger instance. | |||
* @param name logger name. | ||||
* @return logger. | ||||
*/ | */ | |||
static LoggerPtr getLogger(const String& name, | static LoggerPtr getLoggerLS(const LogString& name); | |||
spi::LoggerFactoryPtr factory); | /** | |||
Retrieve the appropriate Logger instance. | ||||
* @param name logger name. | ||||
* @param factory logger factory. | ||||
* @return logger. | ||||
*/ | ||||
static LoggerPtr getLoggerLS(const LogString& name, | ||||
const spi::LoggerFactoryPtr& factory); | ||||
static LoggerPtr exists(const String& name); | /** | |||
* Determines if logger name exists in the hierarchy. | ||||
* @param name logger name. | ||||
* @return true if logger exists. | ||||
*/ | ||||
static LoggerPtr existsLS(const LogString& name); | ||||
static LoggerList getCurrentLoggers(); | static LoggerList getCurrentLoggers(); | |||
/** | /** | |||
Safely close and remove all appenders in all loggers includi | Safely close and remove all appenders in all loggers including | |||
ng | the root logger. | |||
the root logger. | */ | |||
*/ | static void shutdown(); | |||
static void shutdown(); | ||||
/** | /** | |||
Reset all values contained in this current {@link | Reset all values contained in this current {@link | |||
spi::LoggerRepository LoggerRepository} to their default. | spi::LoggerRepository LoggerRepository} to their default. | |||
*/ | */ | |||
static void resetConfiguration(); | static void resetConfiguration(); | |||
}; // class LogManager | }; // class LogManager | |||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_LOG_MANAGER_H | #endif //_LOG4CXX_LOG_MANAGER_H | |||
End of changes. 17 change blocks. | ||||
34 lines changed or deleted | 138 lines changed or added | |||
mdc.h | mdc.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_MDC_H | #ifndef _LOG4CXX_MDC_H | |||
#define _LOG4CXX_MDC_H | #define _LOG4CXX_MDC_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#include <log4cxx/helpers/threadspecificdata.h> | #pragma warning (push) | |||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/log4cxx.h> | ||||
#include <log4cxx/logstring.h> | ||||
#include <map> | #include <map> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
/** | /** | |||
The MDC class is similar to the {@link NDC} class except that it is | The MDC class is similar to the {@link log4cxx::NDC NDC} class exce | |||
based on a map instead of a stack. It provides <em>mapped | pt that it is | |||
diagnostic contexts</em>. A <em>Mapped Diagnostic Context</em>, or | based on a map instead of a stack. It provides <em>mapped | |||
MDC in short, is an instrument for distinguishing interleaved log | diagnostic contexts</em>. A <em>Mapped Diagnostic Context</em>, or | |||
output from different sources. Log output is typically interleaved | MDC in short, is an instrument for distinguishing interleaved log | |||
when a server handles multiple clients near-simultaneously. | output from different sources. Log output is typically interleaved | |||
when a server handles multiple clients near-simultaneously. | ||||
<p><b><em>The MDC is managed on a per thread basis</em></b>. A | ||||
child thread automatically inherits a <em>copy</em> of the mapped | ||||
diagnostic context of its parent. | ||||
<p>The MDC class requires JDK 1.2 or above. Under JDK 1.1 the MDC | ||||
will always return empty values but otherwise will not affect or | ||||
harm your application. | ||||
*/ | ||||
class LOG4CXX_EXPORT MDC | ||||
{ | ||||
public: | ||||
/** String to string stl mp | ||||
*/ | ||||
typedef std::map<String, String> Map; | ||||
private: | ||||
static Map * getCurrentThreadMap(); | ||||
static void setCurrentThreadMap(Map * map); | ||||
static helpers::ThreadSpecificData threadSpecificData; | <p><b><em>The MDC is managed on a per thread basis</em></b>. A | |||
const String& key; | child thread automatically inherits a <em>copy</em> of the mapped | |||
diagnostic context of its parent. | ||||
public: | */ | |||
MDC(const String& key, const String& value); | class LOG4CXX_EXPORT MDC | |||
~MDC(); | { | |||
public: | ||||
/** String to string stl map. | ||||
*/ | ||||
typedef std::map<LogString, LogString> Map; | ||||
/** | /** | |||
* Put a context value (the <code>o</code> parameter) as iden | * Places a key/value pair in the MDC for the current thre | |||
tified | ad | |||
* with the <code>key</code> parameter into the current threa | * which will be removed during the corresponding destru | |||
d's | ctor. Both | |||
* context map. | * construction and destruction are expected to be on th | |||
* | e same thread. | |||
* <p>If the current thread does not have a context map it is | * @param key key | |||
* created as a side effect. | * @param value value. | |||
* */ | */ | |||
static void put(const String& key, const String& value); | MDC(const std::string& key, const std::string& value); | |||
~MDC(); | ||||
/** | /** | |||
* Get the context identified by the <code>key</code> paramet | * Put a context value (the <code>o</code> parameter) as ide | |||
er. | ntified | |||
* | * with the <code>key</code> parameter into the current thre | |||
* <p>This method has no side effects. | ad's | |||
* */ | * context map. | |||
static String get(const String& key); | * | |||
* <p>If the current thread does not have a context map it i | ||||
s | ||||
* created as a side effect. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
static void put(const std::string& key, const std::string& | ||||
value); | ||||
/** | ||||
* Put a context value (the <code>o</code> parameter) as ide | ||||
ntified | ||||
* with the <code>key</code> parameter into the current thre | ||||
ad's | ||||
* context map. | ||||
* | ||||
* <p>If the current thread does not have a context map it i | ||||
s | ||||
* created as a side effect. | ||||
* */ | ||||
static void putLS(const LogString& key, const LogString& va | ||||
lue); | ||||
/** | /** | |||
* Remove the the context identified by the <code>key</code> | * Get the context identified by the <code>key</code> parame | |||
* parameter. */ | ter. | |||
static String remove(const String& key); | * | |||
* <p>This method has no side effects. | ||||
* @param key key. | ||||
* @return value for key, empty if not set. | ||||
* */ | ||||
static std::string get(const std::string& key); | ||||
/** | ||||
* Gets the context identified by the <code>key</code> par | ||||
ameter. | ||||
* @param key context key. | ||||
* @param dest destination to which value is appended. | ||||
* @return true if key has associated value. | ||||
*/ | ||||
static bool get(const LogString& key, LogString& dest); | ||||
/** | /** | |||
* Clear all entries in the MDC. | * Remove the the context identified by the <code>key</code> | |||
*/ | * parameter. | |||
static void clear(); | * @param key key. | |||
* @return value if key had been set, empty if not. | ||||
*/ | ||||
static std::string remove(const std::string& key); | ||||
#if LOG4CXX_WCHAR_T_API | ||||
/** | ||||
* Places a key/value pair in the MDC for the current thre | ||||
ad | ||||
* which will be removed during the corresponding destru | ||||
ctor. Both | ||||
* construction and destruction are expected to be on th | ||||
e same thread. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
MDC(const std::wstring& key, const std::wstring& value); | ||||
/** | ||||
* Put a context value (the <code>o</code> parameter) as ide | ||||
ntified | ||||
* with the <code>key</code> parameter into the current thre | ||||
ad's | ||||
* context map. | ||||
* | ||||
* <p>If the current thread does not have a context map it i | ||||
s | ||||
* created as a side effect. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
static void put(const std::wstring& key, const std::wstring | ||||
& value); | ||||
/** | ||||
* Get the context identified by the <code>key</code> parame | ||||
ter. | ||||
* | ||||
* <p>This method has no side effects. | ||||
* @param key key. | ||||
* @return value for key, empty if not set. | ||||
* */ | ||||
static std::wstring get(const std::wstring& key); | ||||
/** | ||||
* Remove the the context identified by the <code>key</code> | ||||
* parameter. | ||||
* @param key key. | ||||
* @return value if key had been set, empty if not. | ||||
*/ | ||||
static std::wstring remove(const std::wstring& key); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
* Places a key/value pair in the MDC for the current thre | ||||
ad | ||||
* which will be removed during the corresponding destru | ||||
ctor. Both | ||||
* construction and destruction are expected to be on th | ||||
e same thread. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
MDC(const std::basic_string<UniChar>& key, const std::basic | ||||
_string<UniChar>& value); | ||||
/** | ||||
* Put a context value (the <code>o</code> parameter) as ide | ||||
ntified | ||||
* with the <code>key</code> parameter into the current thre | ||||
ad's | ||||
* context map. | ||||
* | ||||
* <p>If the current thread does not have a context map it i | ||||
s | ||||
* created as a side effect. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
static void put(const std::basic_string<UniChar>& key, cons | ||||
t std::basic_string<UniChar>& value); | ||||
/** | ||||
* Get the context identified by the <code>key</code> parame | ||||
ter. | ||||
* | ||||
* <p>This method has no side effects. | ||||
* @param key key. | ||||
* @return value for key, empty if not set. | ||||
* */ | ||||
static std::basic_string<UniChar> get(const std::basic_stri | ||||
ng<UniChar>& key); | ||||
/** | ||||
* Remove the the context identified by the <code>key</code> | ||||
* parameter. | ||||
* @param key key. | ||||
* @return value if key had been set, empty if not. | ||||
*/ | ||||
static std::basic_string<UniChar> remove(const std::basic_s | ||||
tring<UniChar>& key); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
* Places a key/value pair in the MDC for the current thre | ||||
ad | ||||
* which will be removed during the corresponding destru | ||||
ctor. Both | ||||
* construction and destruction are expected to be on th | ||||
e same thread. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
MDC(const CFStringRef& key, const CFStringRef& value); | ||||
/** | ||||
* Put a context value (the <code>o</code> parameter) as ide | ||||
ntified | ||||
* with the <code>key</code> parameter into the current thre | ||||
ad's | ||||
* context map. | ||||
* | ||||
* <p>If the current thread does not have a context map it i | ||||
s | ||||
* created as a side effect. | ||||
* @param key key | ||||
* @param value value. | ||||
*/ | ||||
static void put(const CFStringRef& key, const CFStringRef& | ||||
value); | ||||
/** | ||||
* Get the context identified by the <code>key</code> parame | ||||
ter. | ||||
* | ||||
* <p>This method has no side effects. | ||||
* @param key key. | ||||
* @return value for key, empty if not set. | ||||
* */ | ||||
static CFStringRef get(const CFStringRef& key); | ||||
/** | ||||
* Remove the the context identified by the <code>key</code> | ||||
* parameter. | ||||
* @param key key. | ||||
* @return value if key had been set, empty if not. | ||||
*/ | ||||
static CFStringRef remove(const CFStringRef& key); | ||||
#endif | ||||
/** | ||||
* Remove the the context identified by the <code>key</code> | ||||
* parameter. | ||||
* @param key key. | ||||
* @param prevValue buffer to which previous value is append | ||||
ed. | ||||
* @return true if key existed in MDC. | ||||
*/ | ||||
static bool remove(const LogString& key, LogString& prevVal | ||||
ue); | ||||
/** | /** | |||
* Get the current thread's MDC as a Map. This method is | * Clear all entries in the MDC. | |||
* intended to be used internally. | */ | |||
* */ | static void clear(); | |||
static const Map getContext(); | ||||
static void setContext(Map& map); | private: | |||
}; // class MDC; | MDC(const MDC&); | |||
MDC& operator=(const MDC&); | ||||
LogString key; | ||||
}; // class MDC; | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif // _LOG4CXX_MDC_H | #endif // _LOG4CXX_MDC_H | |||
End of changes. 12 change blocks. | ||||
71 lines changed or deleted | 253 lines changed or added | |||
mutex.h | mutex.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_MUTEX_H | #ifndef _LOG4CXX_HELPERS_MUTEX_H | |||
#define _LOG4CXX_HELPERS_MUTEX_H | #define _LOG4CXX_HELPERS_MUTEX_H | |||
#include <log4cxx/config.h> | #include <log4cxx/log4cxx.h> | |||
#include <log4cxx/helpers/exception.h> | ||||
#ifdef HAVE_PTHREAD | extern "C" { | |||
#include <pthread.h> | struct apr_thread_mutex_t; | |||
#endif | struct apr_pool_t; | |||
} | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT MutexException : public Exception | class Pool; | |||
{ | ||||
}; | ||||
class Condition; | ||||
class LOG4CXX_EXPORT Mutex | class LOG4CXX_EXPORT Mutex | |||
{ | { | |||
friend class Condition; | public: | |||
public: | Mutex(log4cxx::helpers::Pool& p); | |||
Mutex(); | Mutex(apr_pool_t* p); | |||
~Mutex(); | ~Mutex(); | |||
void lock(); | apr_thread_mutex_t* getAPRMutex() const; | |||
void unlock(); | ||||
protected: | private: | |||
#ifdef HAVE_PTHREAD | Mutex(const Mutex&); | |||
pthread_mutex_t mutex; | Mutex& operator=(const Mutex&); | |||
#elif defined(HAVE_MS_THREAD) | apr_thread_mutex_t* mutex; | |||
void * mutex; | }; | |||
#endif | } // namespace helpers | |||
}; | } // namespace log4cxx | |||
} // namespace helpers | ||||
};// namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_MUTEX_H | #endif //_LOG4CXX_HELPERS_MUTEX_H | |||
End of changes. 6 change blocks. | ||||
34 lines changed or deleted | 28 lines changed or added | |||
ndc.h | ndc.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NDC_H | #ifndef _LOG4CXX_NDC_H | |||
#define _LOG4CXX_NDC_H | #define _LOG4CXX_NDC_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#include <log4cxx/helpers/threadspecificdata.h> | #pragma warning ( push ) | |||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/log4cxx.h> | ||||
#include <log4cxx/logstring.h> | ||||
#include <stack> | #include <stack> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class DiagnosticContext; | /** | |||
typedef std::stack<DiagnosticContext> Stack; | the ndc class implements <i>nested diagnostic contexts</i> as | |||
defined by neil harrison in the article "patterns for logging | ||||
diagnostic messages" part of the book "<i>pattern languages of | ||||
program design 3</i>" edited by martin et al. | ||||
/** | <p>a nested diagnostic context, or ndc in short, is an instrument | |||
the ndc class implements <i>nested diagnostic contexts</i> as | to distinguish interleaved log output from different sources. log | |||
defined by neil harrison in the article "patterns for logging | output is typically interleaved when a server handles multiple | |||
diagnostic messages" part of the book "<i>pattern languages of | clients near-simultaneously. | |||
program design 3</i>" edited by martin et al. | ||||
<p>a nested diagnostic context, or ndc in short, is an instrument | <p>interleaved log output can still be meaningful if each log entry | |||
to distinguish interleaved log output from different sources. log | from different contexts had a distinctive stamp. this is where ndcs | |||
output is typically interleaved when a server handles multiple | come into play. | |||
clients near-simultaneously. | ||||
<p>interleaved log output can still be meaningful if each log entry | <p><em><b>note that ndcs are managed on a per thread | |||
from different contexts had a distinctive stamp. this is where ndcs | basis</b></em>. ndc operations such as #push, | |||
come into play. | #pop, #clear and #getDepth | |||
affect the ndc of the <em>current</em> thread only. ndcs of other | ||||
threads remain unaffected. | ||||
<p><em><b>note that ndcs are managed on a per thread | <p>for example, a servlet can build a per client request ndc | |||
basis</b></em>. ndc operations such as #push, | consisting the clients host name and other information contained in | |||
#pop, #clear and #getDepth | the the request. <em>cookies</em> are another source of distinctive | |||
affect the ndc of the <em>current</em> thread only. ndcs of other | information. to build an ndc one uses the #push | |||
threads remain unaffected. | operation. simply put, | |||
<p>for example, a servlet can build a per client request ndc | <p><ul> | |||
consisting the clients host name and other information contained in | <li>contexts can be nested. | |||
the the request. <em>cookies</em> are another source of distinctive | ||||
information. to build an ndc one uses the #push | ||||
operation. simply put, | ||||
<p><ul> | <p><li>when entering a context, call <code>ndc.push</code>. as a | |||
<li>contexts can be nested. | side effect, if there is no nested diagnostic context for the | |||
current thread, this method will create it. | ||||
<p><li>when entering a context, call <code>ndc.push</code>. as a | <p><li>when leaving a context, call <code>ndc.pop</code>. | |||
side effect, if there is no nested diagnostic context for the | ||||
current thread, this method will create it. | ||||
<p><li>when leaving a context, call <code>ndc.pop</code>. | <p><li><b>when exiting a thread make sure to call #remove | |||
</b>. | ||||
</ul> | ||||
<p><li><b>when exiting a thread make sure to call #remove | <p>there is no penalty for forgetting to match each | |||
</b>. | <code>push</code> operation with a corresponding <code>pop</code>, | |||
</ul> | except the obvious mismatch between the real application context | |||
and the context set in the ndc. | ||||
<p>there is no penalty for forgetting to match each | <p>if configured to do so, PatternLayout and | |||
<code>push</code> operation with a corresponding <code>pop</code>, | TTCCLayout instances automatically retrieve the nested diagnostic | |||
except the obvious mismatch between the real application context | context for the current thread without any user intervention. | |||
and the context set in the ndc. | hence, even if a servlet is serving multiple clients | |||
simultaneously, the logs emanating from the same code (belonging to | ||||
the same logger) can still be distinguished because each client | ||||
request will have a different ndc tag. | ||||
<p>if configured to do so, PatternLayout and | <p>heavy duty systems should call the #remove method when | |||
TTCCLayout instances automatically retrieve the nested diagnostic | leaving the run method of a thread. this ensures that the memory | |||
context for the current thread without any user intervention. | used by the thread can be freed by the java garbage | |||
hence, even if a servlet is serving multiple clients | collector. there is a mechanism to lazily remove references to dead | |||
simultaneously, the logs emanating from the same code (belonging to | threads. in practice, this means that you can be a little sloppy | |||
the same category) can still be distinguished because each client | and sometimes forget to call #remove before exiting a | |||
request will have a different ndc tag. | thread. | |||
<p>heavy duty systems should call the #remove method when | */ | |||
leaving the run method of a thread. this ensures that the memory | class LOG4CXX_EXPORT NDC | |||
used by the thread can be freed by the java garbage | { | |||
collector. there is a mechanism to lazily remove references to dead | public: | |||
threads. in practice, this means that you can be a little sloppy | /** | |||
and sometimes forget to call #remove before exiting a | * Pair of Message and FullMessage. | |||
thread. | */ | |||
typedef std::pair<LogString, LogString> DiagnosticContext; | ||||
typedef std::stack<DiagnosticContext> Stack; | ||||
<p>a thread may inherit the nested diagnostic context of another | /** | |||
(possibly parent) thread using the #inherit | Creates a nested diagnostic context. | |||
method. a thread may obtain a copy of its ndc with the | Since java performs no automatic cleanup of objects when a | |||
#clonestack method and pass the reference to any other | scope is left, in log4j push() and pop() must be used | |||
thread, in particular to a child. | to manage the NDC. For convenience, log4cxx provides | |||
*/ | an NDC constructor and destructor which simply call the pu | |||
class LOG4CXX_EXPORT NDC | sh() and | |||
{ | pop() methods, allowing for automatic cleanup when the cur | |||
private: | rent | |||
class DiagnosticContext | scope ends. | |||
{ | ||||
public: | ||||
String fullMessage; | ||||
String message; | ||||
DiagnosticContext(const String& message, | @param message The new diagnostic context information. | |||
const DiagnosticContext * parent); | @see The #push method. | |||
}; | */ | |||
NDC(const std::string& message); | ||||
typedef std::stack<DiagnosticContext> Stack; | /** | |||
Removes the topmost element from the NDC stack. | ||||
static Stack * getCurrentThreadStack(); | @see The #pop method. | |||
static void setCurrentThreadStack(Stack * stack); | */ | |||
~NDC(); | ||||
static helpers::ThreadSpecificData threadSpecificData; | /** | |||
Clear any nested diagnostic information if any. This method | ||||
is | ||||
useful in cases where the same thread can be potentially us | ||||
ed | ||||
over and over in different unrelated contexts. | ||||
*/ | ||||
static void clear(); | ||||
public: | /** | |||
NDC(const String& message); | Clone the diagnostic context for the current thread. | |||
~NDC(); | <p>Internally a diagnostic context is represented as a | |||
stack. A | ||||
given thread can supply the stack (i.e. diagnostic cont | ||||
ext) to a | ||||
child thread so that the child can inherit the parent t | ||||
hread's | ||||
diagnostic context. | ||||
<p>The child thread uses the #inherit method to | ||||
inherit the parent's diagnostic context. | ||||
<p>If not passed to #inherit, returned stack should be | ||||
deleted by caller. | ||||
@return Stack A clone of the current thread's diagnosti | ||||
c context, will not be null. | ||||
*/ | ||||
static Stack * cloneStack(); | ||||
/** | /** | |||
Clear any nested diagnostic information if any. This method | Inherit the diagnostic context of another thread. | |||
is | <p>The parent thread can obtain a reference to its diagnost | |||
useful in cases where the same thread can be potentially use | ic | |||
d | context using the #cloneStack method. It should | |||
over and over in different unrelated contexts. | communicate this information to its child so that it may in | |||
<p>This method is equivalent to calling the #setMaxDepth | herit | |||
method with a zero <code>maxDepth</code> argument. | the parent's diagnostic context. | |||
*/ | <p>The parent's diagnostic context is cloned before being | |||
static void clear(); | inherited. In other words, once inherited, the two diagnost | |||
ic | ||||
contexts can be managed independently. | ||||
@param stack The diagnostic context of the parent thread, | ||||
will be deleted during call. If NULL, NDC will not be | ||||
modified. | ||||
*/ | ||||
static void inherit(Stack * stack); | ||||
/** | /** | |||
Clone the diagnostic context for the current thread. | * Get the current value of the NDC of the | |||
<p>Internally a diagnostic context is represented as a stack | * currrent thread. | |||
. A | * @param dest destination to which to append content of NDC | |||
given thread can supply the stack (i.e. diagnostic context) | . | |||
to a | * @return true if NDC is set. | |||
child thread so that the child can inherit the parent thread | */ | |||
's | static bool get(LogString& dest); | |||
diagnostic context. | ||||
<p>The child thread uses the #inherit method to | ||||
inherit the parent's diagnostic context. | ||||
@return Stack A clone of the current thread's diagnostic co | ||||
ntext. | ||||
*/ | ||||
static Stack * cloneStack(); | ||||
/** | /** | |||
Inherit the diagnostic context of another thread. | Get the current nesting depth of this diagnostic context. | |||
<p>The parent thread can obtain a reference to its diagnosti | */ | |||
c | static int getDepth(); | |||
context using the #cloneStack method. It should | ||||
communicate this information to its child so that it may inh | ||||
erit | ||||
the parent's diagnostic context. | ||||
<p>The parent's diagnostic context is cloned before being | ||||
inherited. In other words, once inherited, the two diagnosti | ||||
c | ||||
contexts can be managed independently. | ||||
<p>In java, a child thread cannot obtain a reference to its | ||||
parent, unless it is directly handed the reference. Conseque | ||||
ntly, | ||||
there is no client-transparent way of inheriting diagnostic | ||||
contexts. Do you know any solution to this problem? | ||||
@param stack The diagnostic context of the parent thread. | ||||
*/ | ||||
static void inherit(Stack * stack); | ||||
/** | /** | |||
<b>Never use this method directly, use the | * Tests if the NDC is empty. | |||
{@link spi::LoggingEvent#getNDC LoggingEvent::getNDC} | */ | |||
method instead.</b> | static bool empty(); | |||
*/ | ||||
static String get(); | ||||
/** | /** | |||
Get the current nesting depth of this diagnostic context. | Pop top value off stack. | |||
*/ | @return top value. | |||
static int getDepth(); | */ | |||
static LogString pop(); | ||||
/** | ||||
Pop top value off stack. | ||||
@param buf to which top value is appended. | ||||
@return true if NDC contained at least one value. | ||||
*/ | ||||
static bool pop(std::string& buf); | ||||
/** | /** | |||
Clients should call this method before leaving a diagnostic | Looks at the last diagnostic context at the top of this NDC | |||
context. | without removing it. | |||
<p>The returned value is the value that was pushed last. If | <p>The returned value is the value that was pushed last. If | |||
no | no | |||
context is available, then the empty string "" is returned. | context is available, then the empty string "" is returned. | |||
@return String The innermost diagnostic context. | @return String The innermost diagnostic context. | |||
*/ | */ | |||
static String pop(); | static LogString peek(); | |||
/** | ||||
Get top value without removing value. | ||||
@param buf to which top value is appended. | ||||
@return true if NDC contained at least one value. | ||||
*/ | ||||
static bool peek(std::string& buf); | ||||
/** | /** | |||
Looks at the last diagnostic context at the top of this NDC | Push new diagnostic context information for the current thr | |||
without removing it. | ead. | |||
<p>The returned value is the value that was pushed last. If | <p>The contents of the <code>message</code> parameter is | |||
no | determined solely by the client. | |||
context is available, then the empty string "" is returned. | @param message The new diagnostic context information. | |||
@return String The innermost diagnostic context. | */ | |||
*/ | static void push(const std::string& message); | |||
static String peek(); | /** | |||
Push new diagnostic context information for the current thr | ||||
ead. | ||||
<p>The contents of the <code>message</code> parameter is | ||||
determined solely by the client. | ||||
@param message The new diagnostic context information. | ||||
*/ | ||||
static void pushLS(const LogString& message); | ||||
/** | /** | |||
Push new diagnostic context information for the current thre | Remove the diagnostic context for this thread. | |||
ad. | <p>Each thread that created a diagnostic context by calling | |||
<p>The contents of the <code>message</code> parameter is | #push should call this method before exiting. Otherwise, | |||
determined solely by the client. | the memory used by the <b>thread</b> cannot be reclaimed by | |||
@param message The new diagnostic context information. | the | |||
*/ | VM. | |||
static void push(const String& message); | <p>As this is such an important problem in heavy duty syste | |||
ms and | ||||
because it is difficult to always guarantee that the remove | ||||
method is called before exiting a thread, this method has b | ||||
een | ||||
augmented to lazily remove references to dead threads. In | ||||
practice, this means that you can be a little sloppy and | ||||
occasionally forget to call #remove before exiting a | ||||
thread. However, you must call <code>remove</code> sometime | ||||
. If | ||||
you never call it, then your application is sure to run out | ||||
of | ||||
memory. | ||||
*/ | ||||
static void remove(); | ||||
/** | #if LOG4CXX_WCHAR_T_API | |||
Remove the diagnostic context for this thread. | /** | |||
<p>Each thread that created a diagnostic context by calling | Creates a nested diagnostic context. | |||
#push should call this method before exiting. Otherwise, | Since java performs no automatic cleanup of objects when a | |||
the memory used by the <b>thread</b> cannot be reclaimed by | scope is left, in log4j push() and pop() must be used | |||
the | to manage the NDC. For convenience, log4cxx provides | |||
VM. | an NDC constructor and destructor which simply call the pu | |||
<p>As this is such an important problem in heavy duty system | sh() and | |||
s and | pop() methods, allowing for automatic cleanup when the cur | |||
because it is difficult to always guarantee that the remove | rent | |||
method is called before exiting a thread, this method has be | scope ends. | |||
en | ||||
augmented to lazily remove references to dead threads. In | @param message The new diagnostic context information. | |||
practice, this means that you can be a little sloppy and | @see The #push method. | |||
occasionally forget to call #remove before exiting a | */ | |||
thread. However, you must call <code>remove</code> sometime. | NDC(const std::wstring& message); | |||
If | /** | |||
you never call it, then your application is sure to run out | Push new diagnostic context information for the current thr | |||
of | ead. | |||
memory. | <p>The contents of the <code>message</code> parameter is | |||
*/ | determined solely by the client. | |||
static void remove(); | @param message The new diagnostic context information. | |||
}; // class NDC; | */ | |||
static void push(const std::wstring& message); | ||||
/** | ||||
* Appends the current NDC content to the provided string | ||||
. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool peek(std::wstring& dst); | ||||
/** | ||||
* Appends the current NDC content to the provided string | ||||
and removes the value from the NDC. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool pop(std::wstring& dst); | ||||
#endif | ||||
#if LOG4CXX_UNICHAR_API | ||||
/** | ||||
Creates a nested diagnostic context. | ||||
Since java performs no automatic cleanup of objects when a | ||||
scope is left, in log4j push() and pop() must be used | ||||
to manage the NDC. For convenience, log4cxx provides | ||||
an NDC constructor and destructor which simply call the pu | ||||
sh() and | ||||
pop() methods, allowing for automatic cleanup when the cur | ||||
rent | ||||
scope ends. | ||||
@param message The new diagnostic context information. | ||||
@see The #push method. | ||||
*/ | ||||
NDC(const std::basic_string<UniChar>& message); | ||||
/** | ||||
Push new diagnostic context information for the current thr | ||||
ead. | ||||
<p>The contents of the <code>message</code> parameter is | ||||
determined solely by the client. | ||||
@param message The new diagnostic context information. | ||||
*/ | ||||
static void push(const std::basic_string<UniChar>& message) | ||||
; | ||||
/** | ||||
* Appends the current NDC content to the provided string | ||||
. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool peek(std::basic_string<UniChar>& dst); | ||||
/** | ||||
* Appends the current NDC content to the provided string | ||||
and removes the value from the NDC. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool pop(std::basic_string<UniChar>& dst); | ||||
#endif | ||||
#if LOG4CXX_CFSTRING_API | ||||
/** | ||||
Creates a nested diagnostic context. | ||||
Since java performs no automatic cleanup of objects when a | ||||
scope is left, in log4j push() and pop() must be used | ||||
to manage the NDC. For convenience, log4cxx provides | ||||
an NDC constructor and destructor which simply call the pu | ||||
sh() and | ||||
pop() methods, allowing for automatic cleanup when the cur | ||||
rent | ||||
scope ends. | ||||
@param message The new diagnostic context information. | ||||
@see The #push method. | ||||
*/ | ||||
NDC(const CFStringRef& message); | ||||
/** | ||||
Push new diagnostic context information for the current thr | ||||
ead. | ||||
<p>The contents of the <code>message</code> parameter is | ||||
determined solely by the client. | ||||
@param message The new diagnostic context information. | ||||
*/ | ||||
static void push(const CFStringRef& message); | ||||
/** | ||||
* Gets the current NDC value. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool peek(CFStringRef& dst); | ||||
/** | ||||
* Gets and removes the current NDC value. | ||||
* @param dst destination. | ||||
* @return true if NDC value set. | ||||
*/ | ||||
static bool pop(CFStringRef& dst); | ||||
#endif | ||||
private: | ||||
NDC(const NDC&); | ||||
NDC& operator=(const NDC&); | ||||
static LogString& getMessage(DiagnosticContext& ctx); | ||||
static LogString& getFullMessage(DiagnosticContext& ctx); | ||||
}; // class NDC; | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif // _LOG4CXX_NDC_H | #endif // _LOG4CXX_NDC_H | |||
End of changes. 31 change blocks. | ||||
186 lines changed or deleted | 339 lines changed or added | |||
nteventlogappender.h | nteventlogappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | #ifndef _LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | |||
#define _LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | #define _LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | |||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
typedef void * HANDLE; | ||||
struct HKEY__; | ||||
struct _SID; | ||||
typedef struct HKEY__ *HKEY; | ||||
typedef struct _SID SID; | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace nt | namespace nt | |||
{ | { | |||
/** | /** | |||
* Appends log events to NT EventLog. | * Appends log events to NT EventLog. | |||
*/ | */ | |||
class LOG4CXX_EXPORT NTEventLogAppender : public AppenderSke | class LOG4CXX_EXPORT NTEventLogAppender : public AppenderSk | |||
leton | eleton | |||
{ | { | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(NTEventLogAppender) | DECLARE_LOG4CXX_OBJECT(NTEventLogAppender) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(NTEventLogAppender) | LOG4CXX_CAST_ENTRY(NTEventLogAppender) | |||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
NTEventLogAppender(); | NTEventLogAppender(); | |||
NTEventLogAppender(const String& server, const Strin | NTEventLogAppender(const LogString& server, const L | |||
g& log, | ogString& log, | |||
const String& source, const LayoutPtr& layou | const LogString& source, const LayoutPtr& l | |||
t); | ayout); | |||
virtual ~NTEventLogAppender(); | virtual ~NTEventLogAppender(); | |||
virtual void activateOptions(); | virtual void activateOptions(log4cxx::helpers::Pool | |||
virtual void close(); | & p); | |||
virtual void setOption(const String& option, const S | virtual void close(); | |||
tring& value); | virtual void setOption(const LogString& option, con | |||
st LogString& value); | ||||
/** | /** | |||
* The SocketAppender does not use a layout. Hence, this meth | * The SocketAppender does not use a layout. Hence, | |||
od | this method | |||
* returns <code>false</code>. | * returns <code>false</code>. | |||
* */ | * | |||
bool requiresLayout() const | */ | |||
{ return true; } | bool requiresLayout() const | |||
{ return true; } | ||||
void setSource(const String& source) | void setSource(const LogString& source) | |||
{ this->source = source; } | { this->source.assign(source); } | |||
const String& getSource() const | const LogString& getSource() const | |||
{ return source; } | { return source; } | |||
void setLog(const String& log) | void setLog(const LogString& log) | |||
{ this->log = log; } | { this->log.assign(log); } | |||
const String& getLog() const | const LogString& getLog() const | |||
{ return log; } | { return log; } | |||
void setServer(const String& server) | void setServer(const LogString& server) | |||
{ this->server = server; } | { this->server.assign(server); } | |||
const String& getServer() const | const LogString& getServer() const | |||
{ return server; } | { return server; } | |||
protected: | protected: | |||
virtual void append(const spi::LoggingEventPtr& even | // | |||
t); | // these typedef are proxies for the real Win32 d | |||
HKEY regGetKey(const String& subkey, unsigned long * | efinitions | |||
disposition); | // and need to be cast to the global definition | |||
void regSetString(HKEY hkey, const String& name, con | s before | |||
st String& value); | // use with a Win32 API call | |||
void regSetDword(HKEY hkey, const String& name, unsi | typedef void SID; | |||
gned long value); | typedef void* HANDLE; | |||
unsigned short getEventType(const spi::LoggingEventP | ||||
tr& event); | virtual void append(const spi::LoggingEventPtr& eve | |||
unsigned short getEventCategory(const spi::LoggingEv | nt, log4cxx::helpers::Pool& p); | |||
entPtr& event); | static unsigned short getEventType(const spi::Loggi | |||
/* | ngEventPtr& event); | |||
* Add this source with appropriate configuration ke | static unsigned short getEventCategory(const spi::L | |||
ys to the registry. | oggingEventPtr& event); | |||
*/ | /* | |||
void addRegistryInfo(); | * Add this source with appropriate configuration k | |||
eys to the registry. | ||||
*/ | ||||
void addRegistryInfo(); | ||||
// Data | ||||
LogString server; | ||||
LogString log; | ||||
LogString source; | ||||
HANDLE hEventLog; | ||||
SID * pCurrentUserSID; | ||||
static LogString getErrorString(const LogString& fu | ||||
nction); | ||||
private: | ||||
NTEventLogAppender(const NTEventLogAppender&); | ||||
NTEventLogAppender& operator=(const NTEventLogAppen | ||||
der&); | ||||
}; // class NTEventLogAppender | ||||
LOG4CXX_PTR_DEF(NTEventLogAppender); | ||||
// Data | ||||
String server; | ||||
String log; | ||||
String source; | ||||
HANDLE hEventLog; | ||||
SID * pCurrentUserSID; | ||||
}; // class NTEventLogAppender | ||||
} // namespace nt | } // namespace nt | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | #endif //_LOG4CXX_NT_EVENT_LOG_APPENDER_HEADER_ | |||
End of changes. 16 change blocks. | ||||
80 lines changed or deleted | 90 lines changed or added | |||
object.h | object.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_OBJECT_H | #ifndef _LOG4CXX_HELPERS_OBJECT_H | |||
#define _LOG4CXX_HELPERS_OBJECT_H | #define _LOG4CXX_HELPERS_OBJECT_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/class.h> | #include <log4cxx/helpers/class.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/classregistration.h> | ||||
#define DECLARE_ABSTRACT_LOG4CXX_OBJECT(object)\ | #define DECLARE_ABSTRACT_LOG4CXX_OBJECT(object)\ | |||
public:\ | public:\ | |||
class Class##object : public helpers::Class\ | class Clazz##object : public helpers::Class\ | |||
{\ | {\ | |||
public:\ | public:\ | |||
Class##object() : helpers::Class(_T(#object)) {}\ | Clazz##object() : helpers::Class() {}\ | |||
virtual ~Clazz##object() {}\ | ||||
virtual log4cxx::LogString getName() const { return LOG4CXX_STR(#ob | ||||
ject); } \ | ||||
};\ | };\ | |||
virtual const helpers::Class& getClass() const;\ | virtual const helpers::Class& getClass() const;\ | |||
static const helpers::Class& getStaticClass();\ | static const helpers::Class& getStaticClass(); \ | |||
static Class##object theClass##object; | static const log4cxx::helpers::ClassRegistration& registerClass(); | |||
#define DECLARE_LOG4CXX_OBJECT(object)\ | #define DECLARE_LOG4CXX_OBJECT(object)\ | |||
public:\ | public:\ | |||
class Class##object : public helpers::Class\ | class Clazz##object : public helpers::Class\ | |||
{\ | {\ | |||
public:\ | public:\ | |||
Class##object() : helpers::Class(_T(#object)) {}\ | Clazz##object() : helpers::Class() {}\ | |||
virtual helpers::ObjectPtr newInstance() const\ | virtual ~Clazz##object() {}\ | |||
{\ | virtual log4cxx::LogString getName() const { return LOG4CXX_STR(#ob | |||
return new object();\ | ject); } \ | |||
}\ | virtual helpers::ObjectPtr newInstance() const\ | |||
{\ | ||||
return new object();\ | ||||
}\ | ||||
};\ | };\ | |||
virtual const helpers::Class& getClass() const;\ | virtual const helpers::Class& getClass() const;\ | |||
static const helpers::Class& getStaticClass();\ | static const helpers::Class& getStaticClass(); \ | |||
static Class##object theClass##object; | static const log4cxx::helpers::ClassRegistration& registerClass(); | |||
#define DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(object, class)\ | #define DECLARE_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(object, class)\ | |||
public:\ | public:\ | |||
virtual const helpers::Class& getClass() const;\ | virtual const helpers::Class& getClass() const;\ | |||
static const helpers::Class& getStaticClass();\ | static const helpers::Class& getStaticClass();\ | |||
static class theClass##object; | static const log4cxx::helpers::ClassRegistration& registerClass(); | |||
#define IMPLEMENT_LOG4CXX_OBJECT(object)\ | #define IMPLEMENT_LOG4CXX_OBJECT(object)\ | |||
object::Class##object object::theClass##object;\ | const log4cxx::helpers::Class& object::getClass() const { return getStaticC | |||
const log4cxx::helpers::Class& object::getClass() const { return theClass## | lass(); }\ | |||
object; }\ | const log4cxx::helpers::Class& object::getStaticClass() { \ | |||
const log4cxx::helpers::Class& object::getStaticClass() { return theClass## | static Clazz##object theClass; \ | |||
object; } | return theClass; \ | |||
} \ | ||||
const log4cxx::helpers::ClassRegistration& object::registerClass() { \ | ||||
static log4cxx::helpers::ClassRegistration classReg(object::getStaticCl | ||||
ass); \ | ||||
return classReg; \ | ||||
}\ | ||||
namespace log4cxx { namespace classes { \ | ||||
const log4cxx::helpers::ClassRegistration& object##Registration = object::r | ||||
egisterClass(); \ | ||||
} } | ||||
#define IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(object, class)\ | #define IMPLEMENT_LOG4CXX_OBJECT_WITH_CUSTOM_CLASS(object, class)\ | |||
object::class object::theClass##object;\ | const log4cxx::helpers::Class& object::getClass() const { return getStaticC | |||
const log4cxx::helpers::Class& object::getClass() const { return theClass## | lass(); }\ | |||
object; }\ | const log4cxx::helpers::Class& object::getStaticClass() { \ | |||
const log4cxx::helpers::Class& object::getStaticClass() { return theClass## | static class theClass; \ | |||
object; } | return theClass; \ | |||
} \ | ||||
const log4cxx::helpers::ClassRegistration& object::registerClass() { \ | ||||
static log4cxx::helpers::ClassRegistration classReg(object::getStaticCl | ||||
ass); \ | ||||
return classReg; \ | ||||
}\ | ||||
namespace log4cxx { namespace classes { \ | ||||
const log4cxx::helpers::ClassRegistration& object##Registration = object::r | ||||
egisterClass(); \ | ||||
} } | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | class AppenderSkeleton; | |||
{ | class Logger; | |||
class LOG4CXX_EXPORT IllegalMonitorStateException : public E | ||||
xception | ||||
{ | ||||
public: | ||||
IllegalMonitorStateException(const String& message) | ||||
: Exception(message) | ||||
{ | ||||
} | ||||
}; | ||||
class Object; | ||||
typedef ObjectPtrT<Object> ObjectPtr; | ||||
/** base class for java-like objects.*/ | ||||
class LOG4CXX_EXPORT Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Object) | ||||
virtual ~Object() {} | ||||
virtual void addRef() const = 0; | ||||
virtual void releaseRef() const = 0; | ||||
virtual void lock() const = 0; | ||||
virtual void unlock() const = 0; | ||||
virtual void wait() const = 0; | ||||
virtual void notify() const = 0; | ||||
virtual void notifyAll() const = 0; | ||||
virtual bool instanceof(const Class& clazz) const = | ||||
0; | ||||
virtual const void * cast(const Class& clazz) const | ||||
= 0; | ||||
}; | ||||
/** utility class for objects multi-thread synchronization.* | ||||
/ | ||||
class synchronized | ||||
{ | ||||
public: | ||||
synchronized(const Object * object) : object(object) | ||||
{ object->lock(); } | ||||
~synchronized() | namespace helpers | |||
{ object->unlock(); } | { | |||
class Pool; | ||||
protected: | /** base class for java-like objects.*/ | |||
const Object * object; | class LOG4CXX_EXPORT Object | |||
}; | { | |||
} | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Object) | ||||
virtual ~Object() {} | ||||
virtual void addRef() const = 0; | ||||
virtual void releaseRef() const = 0; | ||||
virtual bool instanceof(const Class& clazz) const = | ||||
0; | ||||
virtual const void * cast(const Class& clazz) const | ||||
= 0; | ||||
}; | ||||
LOG4CXX_PTR_DEF(Object); | ||||
} | ||||
} | } | |||
#define BEGIN_LOG4CXX_CAST_MAP()\ | #define BEGIN_LOG4CXX_CAST_MAP()\ | |||
const void * cast(const helpers::Class& clazz) const\ | const void * cast(const helpers::Class& clazz) const\ | |||
{\ | {\ | |||
const void * object = 0;\ | const void * object = 0;\ | |||
if (&clazz == &helpers::Object::getStaticClass()) return (helpers::O | if (&clazz == &helpers::Object::getStaticClass()) return (const hel | |||
bject *)this; | pers::Object *)this; | |||
#define END_LOG4CXX_CAST_MAP()\ | #define END_LOG4CXX_CAST_MAP()\ | |||
return object;\ | return object;\ | |||
}\ | }\ | |||
bool instanceof(const helpers::Class& clazz) const\ | bool instanceof(const helpers::Class& clazz) const\ | |||
{ return cast(clazz) != 0; } | { return cast(clazz) != 0; } | |||
#define LOG4CXX_CAST_ENTRY(Interface)\ | #define LOG4CXX_CAST_ENTRY(Interface)\ | |||
if (&clazz == &Interface::getStaticClass()) return (Interface *)this; | if (&clazz == &Interface::getStaticClass()) return (const Interface *)this; | |||
#define LOG4CXX_CAST_ENTRY2(Interface, interface2)\ | #define LOG4CXX_CAST_ENTRY2(Interface, interface2)\ | |||
if (&clazz == &Interface::getStaticClass()) return (Interface *)(interface2 *)this; | if (&clazz == &Interface::getStaticClass()) return (Interface *)(interface2 *)this; | |||
#define LOG4CXX_CAST_ENTRY_CHAIN(Interface)\ | #define LOG4CXX_CAST_ENTRY_CHAIN(Interface)\ | |||
object = Interface::cast(clazz);\ | object = Interface::cast(clazz);\ | |||
if (object != 0) return object; | if (object != 0) return object; | |||
#endif //_LOG4CXX_HELPERS_OBJECT_H | #endif //_LOG4CXX_HELPERS_OBJECT_H | |||
End of changes. 18 change blocks. | ||||
81 lines changed or deleted | 82 lines changed or added | |||
objectimpl.h | objectimpl.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_OBJECT_IMPL_H | #ifndef _LOG4CXX_HELPERS_OBJECT_IMPL_H | |||
#define _LOG4CXX_HELPERS_OBJECT_IMPL_H | #define _LOG4CXX_HELPERS_OBJECT_IMPL_H | |||
#include <log4cxx/config.h> | ||||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <log4cxx/helpers/criticalsection.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** Implementation class for Object.*/ | /** Implementation class for Object.*/ | |||
class LOG4CXX_EXPORT ObjectImpl : public virtual Object | class LOG4CXX_EXPORT ObjectImpl : public virtual Object | |||
{ | { | |||
public: | public: | |||
ObjectImpl(); | ObjectImpl(); | |||
virtual ~ObjectImpl(); | virtual ~ObjectImpl(); | |||
void addRef() const; | void addRef() const; | |||
void releaseRef() const; | void releaseRef() const; | |||
virtual void lock() const; | ||||
virtual void unlock() const; | ||||
virtual void wait() const; | ||||
virtual void notify() const; | ||||
virtual void notifyAll() const; | ||||
protected: | protected: | |||
mutable long volatile ref; | mutable unsigned int volatile ref; | |||
mutable CriticalSection cs; | ||||
mutable void * eventList; | private: | |||
}; | // | |||
} | // prevent object copy and assignment | |||
// | ||||
ObjectImpl(const ObjectImpl&); | ||||
ObjectImpl& operator=(const ObjectImpl&); | ||||
}; | ||||
} | ||||
} | } | |||
#endif //_LOG4CXX_HELPERS_OBJECT_IMPL_H | #endif //_LOG4CXX_HELPERS_OBJECT_IMPL_H | |||
End of changes. 5 change blocks. | ||||
28 lines changed or deleted | 27 lines changed or added | |||
objectptr.h | objectptr.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_OBJECT_PTR_H | #ifndef _LOG4CXX_HELPERS_OBJECT_PTR_H | |||
#define _LOG4CXX_HELPERS_OBJECT_PTR_H | #define _LOG4CXX_HELPERS_OBJECT_PTR_H | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/log4cxx.h> | |||
// | ||||
// Helgrind (race detection tool for Valgrind) will complain if pointer | ||||
// is not initialized in an atomic operation. Static analysis tools | ||||
// (gcc's -Weffc++, for example) will complain if pointer is not initiali | ||||
zed | ||||
// in member initialization list. The use of a macro allows quick | ||||
// switching between the initialization styles. | ||||
// | ||||
#if LOG4CXX_HELGRIND | ||||
#define _LOG4CXX_OBJECTPTR_INIT(x) { exchange(x); | ||||
#else | ||||
#define _LOG4CXX_OBJECTPTR_INIT(x) : p(x) { | ||||
#endif | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** smart pointer to a Object descendant */ | class Class; | |||
template<typename T> class ObjectPtrT | ||||
{ | ||||
public: | ||||
template<typename InterfacePtr> ObjectPtrT(const Int | ||||
erfacePtr& p) | ||||
: p(0) | ||||
{ | ||||
cast(p); | ||||
} | ||||
// Disable conversion using ObjectPtrT* specializati | ||||
on of | ||||
// template<typename InterfacePtr> ObjectPtrT(const | ||||
InterfacePtr& p) | ||||
/* template<> explicit ObjectPtrT(ObjectPtrT* const & p | ||||
) throw(IllegalArgumentException) | ||||
{ | ||||
if (p == 0) | ||||
{ | ||||
throw IllegalArgumentException(Strin | ||||
g()); | ||||
} | ||||
else | ||||
{ | ||||
this->p = p->p; | ||||
this->p->addRef(); | ||||
} | ||||
}*/ | ||||
ObjectPtrT(const int& null) //throw(IllegalArgumentE | class LOG4CXX_EXPORT ObjectPtrBase { | |||
xception) | public: | |||
: p(0) | ObjectPtrBase(); | |||
{ | virtual ~ObjectPtrBase(); | |||
if (null != 0) | static void checkNull(const int& null); | |||
{ | static void* exchange(void** destination, void* newValue); | |||
virtual void* cast(const Class& cls) const = 0; | ||||
}; | ||||
throw IllegalArgumentException(Strin | /** smart pointer to a Object descendant */ | |||
g()); | template<typename T> class ObjectPtrT : public ObjectPtrBase | |||
} | { | |||
} | public: | |||
ObjectPtrT(const int& null) | ||||
_LOG4CXX_OBJECTPTR_INIT(0) | ||||
ObjectPtrBase::checkNull(null); | ||||
} | ||||
ObjectPtrT() : p(0) | ObjectPtrT() | |||
{ | _LOG4CXX_OBJECTPTR_INIT(0) | |||
} | } | |||
ObjectPtrT(T * p) : p(p) | ObjectPtrT(T * p1) | |||
{ | _LOG4CXX_OBJECTPTR_INIT(p1) | |||
if (this->p != 0) | if (this->p != 0) | |||
{ | { | |||
this->p->addRef(); | this->p->addRef(); | |||
} | } | |||
} | } | |||
ObjectPtrT(const ObjectPtrT& p) : p(p.p) | ObjectPtrT(const ObjectPtrT& p1) | |||
{ | _LOG4CXX_OBJECTPTR_INIT(p1.p) | |||
if (this->p != 0) | if (this->p != 0) | |||
{ | { | |||
this->p->addRef(); | this->p->addRef(); | |||
} | } | |||
} | } | |||
~ObjectPtrT() | ObjectPtrT(const ObjectPtrBase& p1) | |||
{ | _LOG4CXX_OBJECTPTR_INIT(reinterpret_cast<T*>(p1.cast(T::getStatic | |||
if (this->p != 0) | Class()))) | |||
{ | if (this->p != 0) { | |||
this->p->releaseRef(); | this->p->addRef(); | |||
} | } | |||
} | } | |||
// Operators | ObjectPtrT(ObjectPtrBase& p1) | |||
template<typename InterfacePtr> ObjectPtrT& operator | _LOG4CXX_OBJECTPTR_INIT(reinterpret_cast<T*>(p1.cast(T::getStatic | |||
=(const InterfacePtr& p) | Class()))) | |||
{ | if (this->p != 0) { | |||
cast(p); | this->p->addRef(); | |||
return *this; | } | |||
} | } | |||
ObjectPtrT& operator=(const ObjectPtrT& p) | ~ObjectPtrT() | |||
{ | { | |||
if (this->p != p.p) | if (p != 0) { | |||
{ | p->releaseRef(); | |||
if (this->p != 0) | } | |||
{ | ||||
this->p->releaseRef(); | ||||
} | ||||
this->p = p.p; | ||||
if (this->p != 0) | ||||
{ | ||||
this->p->addRef(); | ||||
} | ||||
} | ||||
return *this; | ||||
} | } | |||
ObjectPtrT& operator=(const int& null) //throw(Illeg | ObjectPtrT& operator=(const ObjectPtrT& p1) { | |||
alArgumentException) | T* newPtr = p1.p; | |||
{ | if (newPtr != 0) { | |||
if (null != 0) | newPtr->addRef(); | |||
{ | } | |||
throw IllegalArgumentException(Strin | T* oldPtr = exchange(newPtr); | |||
g()); | if (oldPtr != 0) { | |||
} | oldPtr->releaseRef(); | |||
} | ||||
return *this; | ||||
} | ||||
if (this->p != 0) | ObjectPtrT& operator=(const int& null) //throw(IllegalArgumentExce | |||
{ | ption) | |||
this->p->releaseRef(); | { | |||
this->p = 0; | // | |||
// throws IllegalArgumentException if null != 0 | ||||
// | ||||
ObjectPtrBase::checkNull(null); | ||||
T* oldPtr = exchange(0); | ||||
if (oldPtr != 0) { | ||||
oldPtr->releaseRef(); | ||||
} | } | |||
return *this; | ||||
} | ||||
return *this; | ObjectPtrT& operator=(T* p1) { | |||
} | if (p1 != 0) { | |||
p1->addRef(); | ||||
ObjectPtrT& operator=(T* p) | } | |||
{ | T* oldPtr = exchange(p1); | |||
if (this->p != p) | if (oldPtr != 0) { | |||
{ | oldPtr->releaseRef(); | |||
if (this->p != 0) | } | |||
{ | return *this; | |||
this->p->releaseRef(); | } | |||
} | ||||
this->p = p; | ||||
if (this->p != 0) | ObjectPtrT& operator=(ObjectPtrBase& p1) { | |||
{ | T* newPtr = reinterpret_cast<T*>(p1.cast(T::getStaticClass())); | |||
this->p->addRef(); | return operator=(newPtr); | |||
} | } | |||
} | ||||
return *this; | ObjectPtrT& operator=(const ObjectPtrBase& p1) { | |||
} | T* newPtr = reinterpret_cast<T*>(p1.cast(T::getStaticClass())); | |||
return operator=(newPtr); | ||||
} | ||||
bool operator==(const ObjectPtrT& p) const { return (this->p == | bool operator==(const ObjectPtrT& p1) const { return (this->p = | |||
p.p); } | = p1.p); } | |||
bool operator!=(const ObjectPtrT& p) const { return (this->p != | bool operator!=(const ObjectPtrT& p1) const { return (this->p ! | |||
p.p); } | = p1.p); } | |||
bool operator==(const T* p) const { return (this->p == p); } | bool operator<(const ObjectPtrT& p1) const { return (this->p < p1. | |||
bool operator!=(const T* p) const { return (this->p != p); } | p); } | |||
T* operator->() {return p; } | bool operator==(const T* p1) const { return (this->p == p1); } | |||
const T* operator->() const {return p; } | bool operator!=(const T* p1) const { return (this->p != p1); } | |||
bool operator<(const T* p1) const { return (this->p < p1); } | ||||
T* operator->() const {return p; } | ||||
T& operator*() const {return *p; } | T& operator*() const {return *p; } | |||
operator T*() const {return p; } | operator T*() const {return p; } | |||
template<typename InterfacePtr> void cast(const Inte | private: | |||
rfacePtr& p) | ||||
{ | ||||
if (this->p != 0) | ||||
{ | ||||
this->p->releaseRef(); | ||||
this->p = 0; | ||||
} | ||||
if (p != 0) | ||||
{ | ||||
this->p = (T*)p->cast(T::getStaticCl | ||||
ass()); | ||||
if (this->p != 0) | ||||
{ | ||||
this->p->addRef(); | ||||
} | ||||
} | ||||
} | ||||
public: | ||||
T * p; | T * p; | |||
virtual void* cast(const Class& cls) const { | ||||
if (p != 0) { | ||||
return const_cast<void*>(p->cast(cls)); | ||||
} | ||||
return 0; | ||||
} | ||||
T* exchange(const T* newValue) { | ||||
return static_cast<T*>(ObjectPtrBase::exchange( | ||||
reinterpret_cast<void**>(&p), | ||||
const_cast<T*>(newValue))); | ||||
} | ||||
}; | }; | |||
} | } | |||
} | } | |||
#endif //_LOG4CXX_HELPERS_OBJECT_PTR_H | #endif //_LOG4CXX_HELPERS_OBJECT_PTR_H | |||
End of changes. 22 change blocks. | ||||
144 lines changed or deleted | 128 lines changed or added | |||
odbcappender.h | odbcappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_DB_ODBC_APPENDER_H | #ifndef _LOG4CXX_DB_ODBC_APPENDER_H | |||
#define _LOG4CXX_DB_ODBC_APPENDER_H | #define _LOG4CXX_DB_ODBC_APPENDER_H | |||
#include <log4cxx/config.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#ifdef HAVE_ODBC | #include <log4cxx/log4cxx.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/spi/loggingevent.h> | #include <log4cxx/spi/loggingevent.h> | |||
#include <list> | #include <list> | |||
#ifdef HAVE_MS_ODBC | ||||
#include <windows.h> | ||||
#endif | ||||
#include <sqlext.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace db | namespace db | |||
{ | { | |||
class LOG4CXX_EXPORT SQLException : public helpers::Exceptio | class LOG4CXX_EXPORT SQLException : public log4cxx::helpers::Ex | |||
n | ception { | |||
{ | public: | |||
public: | SQLException(short fHandleType, | |||
SQLException(int code) : code(code) {} | void* hInput, const char* prolog, | |||
virtual String getMessage() { return String(); } | log4cxx::helpers::Pool& p); | |||
SQLException(const char* msg); | ||||
SQLException(const SQLException& src); | ||||
private: | ||||
const char* formatMessage(short fHandleType, | ||||
void* hInput, const char* prolog, | ||||
log4cxx::helpers::Pool& p); | ||||
}; | ||||
int code; | /** | |||
}; | <p><b>WARNING: This version of ODBCAppender | |||
is very likely to be completely replaced in the future. Mor | ||||
eoever, | ||||
it does not log exceptions.</b> </p> | ||||
class ODBCAppender; | The ODBCAppender provides for sending log events to a datab | |||
typedef helpers::ObjectPtrT<ODBCAppender> ODBCAppenderPtr; | ase. | |||
/** | <p>Each append call adds to an <code>ArrayList</code> buffe | |||
<p><b>WARNING: This version of ODBCAppender | r. When | |||
is very likely to be completely replaced in the future. More | the buffer is filled each log event is placed in a sql stat | |||
oever, | ement | |||
it does not log exceptions.</b> </p> | (configurable) and executed. | |||
The ODBCAppender provides for sending log events to a databa | <b>BufferSize</b>, <b>db URL</b>, <b>User</b>, & <b>Passwor | |||
se. | d</b> are | |||
configurable options in the standard log4j ways. | ||||
<p>Each append call adds to an <code>ArrayList</code> buffer | <p>The <code>setSql(String sql)</code> sets the SQL stateme | |||
. When | nt to be | |||
the buffer is filled each log event is placed in a sql state | used for logging -- this statement is sent to a | |||
ment | <code>PatternLayout</code> (either created automaticly by t | |||
(configurable) and executed. | he | |||
appender or added by the user). Therefore by default all t | ||||
he | ||||
conversion patterns in <code>PatternLayout</code> can be us | ||||
ed | ||||
inside of the statement. (see the test cases for examples) | ||||
<b>BufferSize</b>, <b>db URL</b>, <b>User</b>, & <b>Password | <p>Overriding the {@link #getLogStatement} method allows mo | |||
</b> are | re | |||
configurable options in the standard log4j ways. | explicit control of the statement used for logging. | |||
<p>The <code>setSql(String sql)</code> sets the SQL statemen | <p>For use as a base class: | |||
t to be | ||||
used for logging -- this statement is sent to a | ||||
<code>PatternLayout</code> (either created automaticly by th | ||||
e | ||||
appender or added by the user). Therefore by default all th | ||||
e | ||||
conversion patterns in <code>PatternLayout</code> can be use | ||||
d | ||||
inside of the statement. (see the test cases for examples) | ||||
<p>Overriding the {@link #getLogStatement} method allows mor | <ul> | |||
e | ||||
explicit control of the statement used for logging. | ||||
<p>For use as a base class: | <li>Override getConnection() to pass any connection | |||
you want. Typically this is used to enable application wid | ||||
e | ||||
connection pooling. | ||||
<ul> | <li>Override closeConnection -- if | |||
you override getConnection make sure to implement | ||||
<code>closeConnection</code> to handle the connection you | ||||
generated. Typically this would return the connection to t | ||||
he | ||||
pool it came from. | ||||
<li>Override getConnection() to pass any connection | <li>Override getLogStatement to | |||
you want. Typically this is used to enable application wide | produce specialized or dynamic statements. The default uses | |||
connection pooling. | the | |||
sql option value. | ||||
<li>Override closeConnection -- if | </ul> | |||
you override getConnection make sure to implement | */ | |||
<code>closeConnection</code> to handle the connection you | ||||
generated. Typically this would return the connection to th | ||||
e | ||||
pool it came from. | ||||
<li>Override getLogStatement to | class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton | |||
produce specialized or dynamic statements. The default uses | { | |||
the | protected: | |||
sql option value. | /** | |||
* URL of the DB for default connection handling | ||||
*/ | ||||
LogString databaseURL; | ||||
</ul> | /** | |||
*/ | * User to connect as for default connection handlin | |||
g | ||||
*/ | ||||
LogString databaseUser; | ||||
class LOG4CXX_EXPORT ODBCAppender : public AppenderSkeleton | /** | |||
{ | * User to use for default connection handling | |||
protected: | */ | |||
/** | LogString databasePassword; | |||
* URL of the DB for default connection handling | ||||
*/ | ||||
String databaseURL; | ||||
/** | typedef void* SQLHDBC; | |||
* User to connect as for default connection handling | typedef void* SQLHENV; | |||
*/ | typedef void* SQLHANDLE; | |||
String databaseUser; | typedef short SQLSMALLINT; | |||
/** | /** | |||
* User to use for default connection handling | * Connection used by default. The connection is op | |||
*/ | ened the first time it | |||
String databasePassword; | * is needed and then held open until the appender i | |||
s closed (usually at | ||||
* garbage collection). This behavior is best modif | ||||
ied by creating a | ||||
* sub-class and overriding the <code>getConnection< | ||||
/code> and | ||||
* <code>closeConnection</code> methods. | ||||
*/ | ||||
SQLHDBC connection; | ||||
SQLHENV env; | ||||
/** | /** | |||
* Connection used by default. The connection is ope | * Stores the string given to the pattern layout for | |||
ned the first time it | conversion into a SQL | |||
* is needed and then held open until the appender is | * statement, eg: insert into LogTable (Thread, File | |||
closed (usually at | , Message) values | |||
* garbage collection). This behavior is best modifi | * ("%t", "%F", "%m") | |||
ed by creating a | * | |||
* sub-class and overriding the <code>getConnection</ | * Be careful of quotes in your messages! | |||
code> and | * | |||
* <code>closeConnection</code> methods. | * Also see PatternLayout. | |||
*/ | */ | |||
SQLHDBC connection; | LogString sqlStatement; | |||
SQLHENV env; | ||||
/** | /** | |||
* Stores the string given to the pattern layout for | * size of LoggingEvent buffer before writing to the | |||
conversion into a SQL | database. | |||
* statement, eg: insert into LogTable (Thread, File, | * Default is 1. | |||
Message) values | */ | |||
* ("%t", "%F", "%m") | size_t bufferSize; | |||
* | ||||
* Be careful of quotes in your messages! | ||||
* | ||||
* Also see PatternLayout. | ||||
*/ | ||||
String sqlStatement; | ||||
/** | /** | |||
* size of LoggingEvent buffer before writting to the | * ArrayList holding the buffer of Logging Events. | |||
database. | */ | |||
* Default is 1. | std::list<spi::LoggingEventPtr> buffer; | |||
*/ | ||||
size_t bufferSize; | ||||
/** | public: | |||
* ArrayList holding the buffer of Logging Events. | DECLARE_LOG4CXX_OBJECT(ODBCAppender) | |||
*/ | BEGIN_LOG4CXX_CAST_MAP() | |||
std::list<spi::LoggingEventPtr> buffer; | LOG4CXX_CAST_ENTRY(ODBCAppender) | |||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
public: | ODBCAppender(); | |||
DECLARE_LOG4CXX_OBJECT(ODBCAppender) | virtual ~ODBCAppender(); | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(ODBCAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
ODBCAppender(); | /** | |||
virtual ~ODBCAppender(); | Set options | |||
*/ | ||||
virtual void setOption(const LogString& option, con | ||||
st LogString& value); | ||||
/** | /** | |||
Set options | Activate the specified options. | |||
*/ | */ | |||
virtual void setOption(const String& option, const S | virtual void activateOptions(log4cxx::helpers::Pool | |||
tring& value); | & p); | |||
/** | /** | |||
* Adds the event to the buffer. When full the buffe | * Adds the event to the buffer. When full the buff | |||
r is flushed. | er is flushed. | |||
*/ | */ | |||
void append(const spi::LoggingEventPtr& event); | void append(const spi::LoggingEventPtr& event, log4cxx::h | |||
elpers::Pool&); | ||||
/** | /** | |||
* By default getLogStatement sends the event to the | * By default getLogStatement sends the event to the | |||
required Layout object. | required Layout object. | |||
* The layout will format the given pattern into a wo | * The layout will format the given pattern into a w | |||
rkable SQL string. | orkable SQL string. | |||
* | * | |||
* Overriding this provides direct access to the Logg | * Overriding this provides direct access to the Log | |||
ingEvent | gingEvent | |||
* when constructing the logging statement. | * when constructing the logging statement. | |||
* | * | |||
*/ | */ | |||
protected: | protected: | |||
String getLogStatement(const spi::LoggingEventPtr& e | LogString getLogStatement(const spi::LoggingEventPt | |||
vent) const; | r& event, | |||
helpers::Pool& p) const; | ||||
/** | /** | |||
* | * | |||
* Override this to provide an alertnate method of ge | * Override this to provide an alertnate method of g | |||
tting | etting | |||
* connections (such as caching). One method to fix | * connections (such as caching). One method to fix | |||
this is to open | this is to open | |||
* connections at the start of flushBuffer() and clos | * connections at the start of flushBuffer() and clo | |||
e them at the | se them at the | |||
* end. I use a connection pool outside of ODBCAppen | * end. I use a connection pool outside of ODBCAppe | |||
der which is | nder which is | |||
* accessed in an override of this method. | * accessed in an override of this method. | |||
* */ | * */ | |||
void execute(const String& sql) /*throw(SQLException | virtual void execute(const LogString& sql, | |||
)*/; | log4cxx::helpers::Pool& p) /*throw(SQLException | |||
)*/; | ||||
/** | /** | |||
* Override this to return the connection to a pool, | * Override this to return the connection to a pool, | |||
or to clean up the | or to clean up the | |||
* resource. | * resource. | |||
* | * | |||
* The default behavior holds a single connection ope | * The default behavior holds a single connection op | |||
n until the appender | en until the appender | |||
* is closed (typically when garbage collected). | * is closed (typically when garbage collected). | |||
*/ | */ | |||
virtual void closeConnection(SQLHDBC con); | virtual void closeConnection(SQLHDBC con); | |||
/** | /** | |||
* Override this to link with your connection pooling | * Override this to link with your connection poolin | |||
system. | g system. | |||
* | * | |||
* By default this creates a single connection which | * By default this creates a single connection which | |||
is held open | is held open | |||
* until the object is garbage collected. | * until the object is garbage collected. | |||
*/ | */ | |||
virtual SQLHDBC getConnection() /*throw(SQLException | virtual SQLHDBC getConnection(log4cxx::helpers::Poo | |||
)*/; | l& p) /*throw(SQLException)*/; | |||
/** | /** | |||
* Closes the appender, flushing the buffer first the | * Closes the appender, flushing the buffer first th | |||
n closing the default | en closing the default | |||
* connection if it is open. | * connection if it is open. | |||
*/ | */ | |||
public: | public: | |||
virtual void close(); | virtual void close(); | |||
/** | /** | |||
* loops through the buffer of LoggingEvents, gets a | * loops through the buffer of LoggingEvents, gets a | |||
* sql string from getLogStatement() and sends it to | * sql string from getLogStatement() and sends it to | |||
execute(). | execute(). | |||
* Errors are sent to the errorHandler. | * Errors are sent to the errorHandler. | |||
* | * | |||
* If a statement fails the LoggingEvent stays in the | * If a statement fails the LoggingEvent stays in th | |||
buffer! | e buffer! | |||
*/ | */ | |||
void flushBuffer(); | virtual void flushBuffer(log4cxx::helpers::Pool& p) | |||
; | ||||
/** | /** | |||
* ODBCAppender requires a layout. | * ODBCAppender requires a layout. | |||
* */ | * */ | |||
virtual bool requiresLayout() const | virtual bool requiresLayout() const | |||
{ return true; } | { return true; } | |||
/** | /** | |||
* Set pre-formated statement eg: insert into LogTabl | * Set pre-formated statement eg: insert into LogTab | |||
e (msg) values ("%m") | le (msg) values ("%m") | |||
*/ | */ | |||
void setSql(const String& s); | void setSql(const LogString& s); | |||
/** | /** | |||
* Returns pre-formated statement eg: insert into Log | * Returns pre-formated statement eg: insert into Lo | |||
Table (msg) values ("%m") | gTable (msg) values ("%m") | |||
*/ | */ | |||
inline const String& getSql() const | inline const LogString& getSql() const | |||
{ return sqlStatement; } | { return sqlStatement; } | |||
inline void setUser(const String& user) | inline void setUser(const LogString& user) | |||
{ databaseUser = user; } | { databaseUser = user; } | |||
inline void setURL(const String& url) | inline void setURL(const LogString& url) | |||
{ databaseURL = url; } | { databaseURL = url; } | |||
inline void setPassword(const String& password) | inline void setPassword(const LogString& password) | |||
{ databasePassword = password; } | { databasePassword = password; } | |||
inline void setBufferSize(size_t newBufferSize) | inline void setBufferSize(size_t newBufferSize) | |||
{ bufferSize = newBufferSize; } | { bufferSize = newBufferSize; } | |||
inline const String& getUser() const | inline const LogString& getUser() const | |||
{ return databaseUser; } | { return databaseUser; } | |||
inline const String& getURL() const | inline const LogString& getURL() const | |||
{ return databaseURL; } | { return databaseURL; } | |||
inline const String& getPassword() const | inline const LogString& getPassword() const | |||
{ return databasePassword; } | { return databasePassword; } | |||
inline size_t getBufferSize() const | ||||
{ return bufferSize; } | ||||
private: | ||||
ODBCAppender(const ODBCAppender&); | ||||
ODBCAppender& operator=(const ODBCAppender&); | ||||
}; // class ODBCAppender | ||||
LOG4CXX_PTR_DEF(ODBCAppender); | ||||
inline size_t getBufferSize() const | ||||
{ return bufferSize; } | ||||
}; // class ODBCAppender | ||||
} // namespace db | } // namespace db | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif // HAVE_ODBC | #if defined(_MSC_VER) | |||
#endif // _LOG4CXX_NET_SOCKET_APPENDER_H | #pragma warning ( pop ) | |||
#endif | ||||
#endif // _LOG4CXX_DB_ODBC_APPENDER_H | ||||
End of changes. 49 change blocks. | ||||
237 lines changed or deleted | 258 lines changed or added | |||
onlyonceerrorhandler.h | onlyonceerrorhandler.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | #ifndef _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | |||
#define _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | #define _LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | |||
#include <log4cxx/spi/errorhandler.h> | #include <log4cxx/spi/errorhandler.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
The <code>OnlyOnceErrorHandler</code> implements log4cxx's d | The <code>OnlyOnceErrorHandler</code> implements log4cxx's | |||
efault | default | |||
error handling policy which consists of emitting a message f | error handling policy which consists of emitting a message | |||
or the | for the | |||
first error in an appender and ignoring all following errors | first error in an appender and ignoring all following error | |||
. | s. | |||
<p>The error message is printed on <code>System.err</code>. | <p>The error message is printed on <code>System.err</code>. | |||
<p>This policy aims at protecting an otherwise working appli | <p>This policy aims at protecting an otherwise working appl | |||
cation | ication | |||
from being flooded with error messages when logging fails | from being flooded with error messages when logging fails | |||
*/ | */ | |||
class LOG4CXX_EXPORT OnlyOnceErrorHandler : | class LOG4CXX_EXPORT OnlyOnceErrorHandler : | |||
public virtual spi::ErrorHandler, | public virtual spi::ErrorHandler, | |||
public virtual ObjectImpl | public virtual ObjectImpl | |||
{ | { | |||
private: | private: | |||
String WARN_PREFIX; | LogString WARN_PREFIX; | |||
String ERROR_PREFIX; | LogString ERROR_PREFIX; | |||
mutable bool firstTime; | mutable bool firstTime; | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(OnlyOnceErrorHandler) | DECLARE_LOG4CXX_OBJECT(OnlyOnceErrorHandler) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(spi::OptionHandler) | LOG4CXX_CAST_ENTRY(spi::OptionHandler) | |||
LOG4CXX_CAST_ENTRY(spi::ErrorHandler) | LOG4CXX_CAST_ENTRY(spi::ErrorHandler) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
OnlyOnceErrorHandler(); | OnlyOnceErrorHandler(); | |||
void addRef() const; | ||||
void releaseRef() const; | ||||
/** | /** | |||
Does not do anything. | Does not do anything. | |||
*/ | */ | |||
void setLogger(const LoggerPtr& logger); | void setLogger(const LoggerPtr& logger); | |||
/** | /** | |||
No options to activate. | No options to activate. | |||
*/ | */ | |||
void activateOptions(); | void activateOptions(log4cxx::helpers::Pool& p); | |||
void setOption(const String& name, const String& value); | void setOption(const LogString& option, const LogString& value) | |||
; | ||||
/** | /** | |||
Prints the message and the stack trace of the exception on | Prints the message and the stack trace of the exception on | |||
<code>System.err</code>. */ | <code>System.err</code>. */ | |||
void error(const String& message, Exception& e, | void error(const LogString& message, const std::exception& e, | |||
int errorCode) const; | int errorCode) const; | |||
/** | /** | |||
Prints the message and the stack trace of the exception on | Prints the message and the stack trace of the exception on | |||
<code>System.err</code>. | <code>System.err</code>. | |||
*/ | */ | |||
void error(const String& message, Exception& e, | void error(const LogString& message, const std::exception& e, | |||
int errorCode, const spi::LoggingEventPtr& e | int errorCode, const spi::LoggingEventPtr& | |||
vent) const; | event) const; | |||
/** | /** | |||
Print a the error message passed as parameter on | Print a the error message passed as parameter on | |||
<code>System.err</code>. | <code>System.err</code>. | |||
*/ | */ | |||
void error(const String& message) const; | void error(const LogString& message) const; | |||
/** | /** | |||
Does not do anything. | Does not do anything. | |||
*/ | */ | |||
void setAppender(const AppenderPtr& appender); | void setAppender(const AppenderPtr& appender); | |||
/** | /** | |||
Does not do anything. | Does not do anything. | |||
*/ | */ | |||
void setBackupAppender(const AppenderPtr& appender); | void setBackupAppender(const AppenderPtr& appender); | |||
}; | }; | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | #endif //_LOG4CXX_HELPERS_ONLY_ONCE_ERROR_HANDLER_H | |||
End of changes. 12 change blocks. | ||||
49 lines changed or deleted | 53 lines changed or added | |||
optionconverter.h | optionconverter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_OPTION_CONVERTER_H | #ifndef _LOG4CXX_HELPER_OPTION_CONVERTER_H | |||
#define _LOG4CXX_HELPER_OPTION_CONVERTER_H | #define _LOG4CXX_HELPER_OPTION_CONVERTER_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Level; | class Level; | |||
typedef helpers::ObjectPtrT<Level> LevelPtr; | class File; | |||
typedef helpers::ObjectPtrT<Level> LevelPtr; | ||||
namespace spi | ||||
{ | ||||
class LoggerRepository; | ||||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | ||||
ryPtr; | ||||
} | ||||
namespace helpers | namespace spi | |||
{ | { | |||
class Properties; | class LoggerRepository; | |||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposit | ||||
oryPtr; | ||||
} | ||||
class Object; | namespace helpers | |||
typedef ObjectPtrT<Object> ObjectPtr; | { | |||
class Properties; | ||||
class Class; | class Object; | |||
typedef ObjectPtrT<Object> ObjectPtr; | ||||
/** A convenience class to convert property values to specif | class Class; | |||
ic types.*/ | ||||
class LOG4CXX_EXPORT OptionConverter | ||||
{ | ||||
static String DELIM_START; | ||||
static TCHAR DELIM_STOP; | ||||
static int DELIM_START_LEN; | ||||
static int DELIM_STOP_LEN; | ||||
/** OptionConverter is a static class. */ | /** A convenience class to convert property values to speci | |||
private: | fic types.*/ | |||
OptionConverter() {} | class LOG4CXX_EXPORT OptionConverter | |||
{ | ||||
/** OptionConverter is a static class. */ | ||||
private: | ||||
OptionConverter() {} | ||||
public: | public: | |||
static String convertSpecialChars(const String& s); | static LogString convertSpecialChars(const LogStrin | |||
g& s); | ||||
/** | /** | |||
If <code>value</code> is "true", then <code>true</co | If <code>value</code> is "true", then <code>true</c | |||
de> is | ode> is | |||
returned. If <code>value</code> is "false", then | returned. If <code>value</code> is "false", then | |||
<code>true</code> is returned. Otherwise, <code>defa | <code>true</code> is returned. Otherwise, <code>def | |||
ult</code> is | ault</code> is | |||
returned. | returned. | |||
<p>Case of value is unimportant. | <p>Case of value is unimportant. | |||
*/ | */ | |||
static bool toBoolean(const String& value, bool dEfa | static bool toBoolean(const LogString& value, bool | |||
ult); | dEfault); | |||
static int toInt(const String& value, int dEfault); | static int toInt(const LogString& value, int dEfaul | |||
static long toFileSize(const String& value, long dEf | t); | |||
ault); | static long toFileSize(const LogString& value, long | |||
static const LevelPtr& toLevel(const String& value, | dEfault); | |||
const LevelPtr& defaultValue); | static LevelPtr toLevel(const LogString& value, | |||
const LevelPtr& defaultValue); | ||||
/** | /** | |||
Find the value corresponding to <code>key</code> in | Find the value corresponding to <code>key</code> in | |||
<code>props</code>. Then perform variable substitution on th | <code>props</code>. Then perform variable substitution on t | |||
e | he | |||
found value. | found value. | |||
*/ | */ | |||
static String findAndSubst(const String& key, Proper | static LogString findAndSubst(const LogString& key, | |||
ties& props); | Properties& props); | |||
/** | /** | |||
Perform variable substitution in string <code>val</code> from the | Perform variable substitution in string <code>val</code> from the | |||
values of keys found in the system propeties. | values of keys found in the system propeties. | |||
<p>The variable substitution delimeters are <b>${</b> and <b>}</b>. | <p>The variable substitution delimeters are <b>${</b> and <b>}</b>. | |||
<p>For example, if the System properties contains "key=value", then | <p>For example, if the System properties contains "key=value", then | |||
the call | the call | |||
<pre> | <pre> | |||
skipping to change at line 113 | skipping to change at line 110 | |||
will set <code>s</code> to "Value of inexistentKey is []" | will set <code>s</code> to "Value of inexistentKey is []" | |||
<p>An IllegalArgumentException is thrown if | <p>An IllegalArgumentException is thrown if | |||
<code>val</code> contains a start delimeter "${" which is not | <code>val</code> contains a start delimeter "${" which is not | |||
balanced by a stop delimeter "}". </p> | balanced by a stop delimeter "}". </p> | |||
@param val The string on which variable substitution is performed. | @param val The string on which variable substitution is performed. | |||
@param props The properties from which variable substitution is performed. | @param props The properties from which variable substitution is performed. | |||
@throws IllegalArgumentException if <code>val</code> is malformed. | @throws IllegalArgumentException if <code>val</code> is malformed. | |||
*/ | */ | |||
static String substVars(const String& val, Propertie s& props); | static LogString substVars(const LogString& val, Pr operties& props); | |||
/** | /** | |||
@param key The key to search for. | * Gets the specified system property. | |||
@param def The default value to return. | @param key The key to search for. | |||
@return the string value of the system property, or | @param def The default value to return. | |||
the default | @return the string value of the system property, or | |||
value if there is no property with that key. | the default | |||
*/ | value if there is no property with that key. | |||
static String getSystemProperty(const String& key, c | */ | |||
onst String& def); | static LogString getSystemProperty(const LogString& | |||
key, const LogString& def); | ||||
/** | /** | |||
Instantiate an object given a class name. Check that | Instantiate an object given a class name. Check tha | |||
the | t the | |||
<code>className</code> is a subclass of | <code>className</code> is a subclass of | |||
<code>superClass</code>. If that test fails or the o | <code>superClass</code>. If that test fails or the | |||
bject could | object could | |||
not be instantiated, then <code>defaultValue</code> | not be instantiated, then <code>defaultValue</code> | |||
is returned. | is returned. | |||
@param className The fully qualified class name of t | @param className The fully qualified class name of | |||
he object to instantiate. | the object to instantiate. | |||
@param superClass The class to which the new object | @param superClass The class to which the new object | |||
should belong. | should belong. | |||
@param defaultValue The object to return in case of | @param defaultValue The object to return in case of | |||
non-fulfillment | non-fulfillment | |||
*/ | */ | |||
static ObjectPtr instantiateByClassName(const String | static ObjectPtr instantiateByClassName(const LogSt | |||
& className, | ring& className, | |||
const Class& superClass, const ObjectPtr& de | const Class& superClass, const ObjectPtr& d | |||
faultValue); | efaultValue); | |||
static ObjectPtr instantiateByKey(Properties& props, | static ObjectPtr instantiateByKey(Properties& props | |||
const String& key, const Class& superClass, | , | |||
const ObjectPtr& defaultValue); | const LogString& key, const Class& superCla | |||
ss, | ||||
const ObjectPtr& defaultValue); | ||||
/** | /** | |||
Configure log4cxx given a configFileName. | Configure log4cxx given a configFileName. | |||
<p>The configFileName must point to a file which wil | <p>The configFileName must point to a file which wi | |||
l be | ll be | |||
interpreted by a new instance of a log4cxx configura | interpreted by a new instance of a log4cxx configur | |||
tor. | ator. | |||
<p>All configurations steps are taken on the | <p>All configurations steps are taken on the | |||
<code>hierarchy</code> passed as a parameter. | <code>hierarchy</code> passed as a parameter. | |||
<p> | <p> | |||
@param configFileName The location of the configurat | @param configFileName The location of the configura | |||
ion file. | tion file. | |||
@param clazz The classname, of the log4cxx configura | @param clazz The classname, of the log4cxx configur | |||
tor which | ator which | |||
will parse the file <code>configFileName</code>. Thi | will parse the file <code>configFileName</code>. Th | |||
s must be | is must be | |||
a subclass of Configurator, or null. If this value i | a subclass of Configurator, or null. If this value | |||
s null then | is null then | |||
a default configurator of PropertyConfigurator is us | a default configurator of PropertyConfigurator is u | |||
ed, unless the | sed, unless the | |||
filename pointed to by <code>configFileName</code> e | filename pointed to by <code>configFileName</code> | |||
nds in '.xml', | ends in '.xml', | |||
in which case DOMConfigurator is used. | in which case DOMConfigurator is used. | |||
@param hierarchy The Hierarchy to act on. | @param hierarchy The Hierarchy to act on. | |||
*/ | */ | |||
static void selectAndConfigure(const String& configF | static void selectAndConfigure(const File& configFi | |||
ileName, | leName, | |||
const String& clazz, spi::LoggerRepositoryPt | const LogString& clazz, spi::LoggerReposito | |||
r& hierarchy); | ryPtr& hierarchy); | |||
}; | }; | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_HELPER_OPTION_CONVERTER_H | #endif //_LOG4CXX_HELPER_OPTION_CONVERTER_H | |||
End of changes. 21 change blocks. | ||||
121 lines changed or deleted | 123 lines changed or added | |||
optionhandler.h | optionhandler.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_OPTION_HANDLER_H | #ifndef _LOG4CXX_SPI_OPTION_HANDLER_H | |||
#define _LOG4CXX_SPI_OPTION_HANDLER_H | #define _LOG4CXX_SPI_OPTION_HANDLER_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class OptionHandler; | class OptionHandler; | |||
typedef helpers::ObjectPtrT<OptionHandler> OptionHandlerPtr; | typedef helpers::ObjectPtrT<OptionHandler> OptionHandlerPtr | |||
; | ||||
/** | /** | |||
A string based interface to configure package components. | A string based interface to configure package components. | |||
*/ | */ | |||
class LOG4CXX_EXPORT OptionHandler : public virtual helpers: | class LOG4CXX_EXPORT OptionHandler : public virtual helpers | |||
:Object | ::Object | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(OptionHandler) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(OptionHandler) | |||
virtual ~OptionHandler() {} | virtual ~OptionHandler() {} | |||
/** | /** | |||
Activate the options that were previously set with c | Activate the options that were previously set with | |||
alls to option | calls to option | |||
setters. | setters. | |||
<p>This allows to defer activiation of the options u | <p>This allows to defer activiation of the options | |||
ntil all | until all | |||
options have been set. This is required for componen | options have been set. This is required for compone | |||
ts which have | nts which have | |||
related options that remain ambigous until all are s | related options that remain ambigous until all are | |||
et. | set. | |||
<p>For example, the FileAppender has the {@link | <p>For example, the FileAppender has the {@link | |||
FileAppender#setFile File} and {@link | FileAppender#setFile File} and {@link | |||
FileAppender#setAppend Append} options both of | FileAppender#setAppend Append} options both of | |||
which are ambigous until the other is also set. */ | which are ambigous until the other is also set. */ | |||
virtual void activateOptions() = 0; | virtual void activateOptions(log4cxx::helpers::Pool | |||
& p) = 0; | ||||
/** | /** | |||
Set <code>option</code> to <code>value</code>. | Set <code>option</code> to <code>value</code>. | |||
<p>The handling of each option depends on the Option | <p>The handling of each option depends on the Optio | |||
Handler | nHandler | |||
instance. Some options may become active immediately | instance. Some options may become active immediatel | |||
whereas | y whereas | |||
other may be activated only when #activateOptions is | other may be activated only when #activateOptions i | |||
called. | s | |||
*/ | called. | |||
virtual void setOption(const String& option, const S | */ | |||
tring& value) = 0; | virtual void setOption(const LogString& option, | |||
const LogString& value) = 0; | ||||
}; // class OptionConverter | }; // class OptionConverter | |||
} // namespace spi | } // namespace spi | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_SPI_OPTION_HANDLER_H | #endif //_LOG4CXX_SPI_OPTION_HANDLER_H | |||
End of changes. 10 change blocks. | ||||
48 lines changed or deleted | 52 lines changed or added | |||
patternconverter.h | patternconverter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_PATTERN_CONVERTER_H | #ifndef _LOG4CXX_PATTERN_PATTERN_CONVERTER_H | |||
#define _LOG4CXX_HELPER_PATTERN_CONVERTER_H | #define _LOG4CXX_PATTERN_PATTERN_CONVERTER_H | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/logstring.h> | ||||
#include <vector> | ||||
namespace log4cxx | #ifdef _MSC_VER | |||
{ | // disable identifier too wide for debugging warning | |||
namespace spi | #pragma warning ( disable: 4231 4251 4275 4786 ) | |||
{ | #endif | |||
class LoggingEvent; | ||||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | ||||
} | ||||
namespace helpers | #define DECLARE_LOG4CXX_PATTERN(cls) DECLARE_ABSTRACT_LOG4CXX_OBJECT(cls) | |||
{ | ||||
class FormattingInfo; | ||||
class PatternConverter; | namespace log4cxx { | |||
typedef ObjectPtrT<PatternConverter> PatternConverterPtr; | namespace pattern { | |||
/** | typedef std::vector<LogString> OptionsList; | |||
<p>PatternConverter is an abtract class that provides the | ||||
formatting functionality that derived classes need. | ||||
<p>Conversion specifiers in a conversion patterns are parsed | /** | |||
to | ||||
individual PatternConverters. Each of which is responsible f | ||||
or | ||||
converting a logging event in a converter specific manner. | ||||
*/ | ||||
class LOG4CXX_EXPORT PatternConverter : public ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(PatternConverter) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(PatternConverter) | ||||
END_LOG4CXX_CAST_MAP() | ||||
PatternConverterPtr next; | <p>PatternConverter is an abstract class that provides the | |||
int minChar; | formatting functionality that derived classes need. | |||
int maxChar; | ||||
bool leftAlign; | ||||
mutable StringBuffer os; | ||||
protected: | <p>Conversion specifiers in a conversion patterns are parsed to | |||
PatternConverter(); | individual PatternConverters. Each of which is responsible for | |||
PatternConverter(const FormattingInfo& fi); | converting an object in a converter specific manner. | |||
/** | */ | |||
Derived pattern converters must override this method | class LOG4CXX_EXPORT PatternConverter : public virtual log4cxx::helpers::Ob | |||
in order to | jectImpl { | |||
convert conversion specifiers in the correct way. | ||||
*/ | ||||
virtual void convert(ostream& sbuf, | ||||
const spi::LoggingEventPtr& event) const = 0 | ||||
; | ||||
public: | /** | |||
/** | * Converter name. | |||
A template method for formatting in a converter spec | */ | |||
ific way. | const LogString name; | |||
*/ | ||||
virtual void format(ostream& sbuf, const spi::Loggin | ||||
gEventPtr& e) const; | ||||
}; // class PatternConverter | /** | |||
} // namespace helpers | * Converter style name. | |||
}; // namespace log4cxx | */ | |||
const LogString style; | ||||
#endif // _LOG4CXX_HELPER_PATTERN_CONVERTER_H | protected: | |||
/** | ||||
* Create a new pattern converter. | ||||
* @param name name for pattern converter. | ||||
* @param style CSS style for formatted output. | ||||
*/ | ||||
PatternConverter(const LogString& name, | ||||
const LogString& style); | ||||
virtual ~PatternConverter(); | ||||
public: | ||||
DECLARE_LOG4CXX_PATTERN(PatternConverter) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(PatternConverter) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | ||||
* Formats an object into a string buffer. | ||||
* @param obj event to format, may not be null. | ||||
* @param toAppendTo string buffer to which the formatted event will be a | ||||
ppended. May not be null. | ||||
* @param p pool for any allocations necessary during formatting. | ||||
*/ | ||||
virtual void format(const log4cxx::helpers::ObjectPtr& obj, | ||||
LogString& toAppendTo, | ||||
log4cxx::helpers::Pool& p) const = 0; | ||||
/** | ||||
* This method returns the name of the conversion pattern. | ||||
* | ||||
* The name can be useful to certain Layouts such as HTMLLayout. | ||||
* | ||||
* @return the name of the conversion pattern | ||||
*/ | ||||
LogString getName() const; | ||||
/** | ||||
* This method returns the CSS style class that should be applied to | ||||
* the LoggingEvent passed as parameter, which can be null. | ||||
* | ||||
* This information is currently used only by HTMLLayout. | ||||
* | ||||
* @param e null values are accepted | ||||
* @return the name of the conversion pattern | ||||
*/ | ||||
virtual LogString getStyleClass(const log4cxx::helpers::ObjectPtr& e) con | ||||
st; | ||||
protected: | ||||
/** | ||||
* Appends content in the locale code page to a LogString. | ||||
* @param toAppendTo string to which content is appended. | ||||
* @param src content. | ||||
*/ | ||||
static void append(LogString& toAppendTo, const std::string& src); | ||||
}; | ||||
LOG4CXX_PTR_DEF(PatternConverter); | ||||
} | ||||
} | ||||
#endif | ||||
End of changes. 15 change blocks. | ||||
63 lines changed or deleted | 35 lines changed or added | |||
patternlayout.h | patternlayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_PATTERN_LAYOUT_H | #ifndef _LOG4CXX_PATTERN_LAYOUT_H | |||
#define _LOG4CXX_PATTERN_LAYOUT_H | #define _LOG4CXX_PATTERN_LAYOUT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
#include <log4cxx/helpers/patternconverter.h> | #include <log4cxx/pattern/loggingeventpatternconverter.h> | |||
#include <log4cxx/pattern/formattinginfo.h> | ||||
#include <log4cxx/pattern/patternparser.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | ||||
{ | ||||
class PatternConverter; | ||||
typedef ObjectPtrT<PatternConverter> PatternConverterPtr; | ||||
} | ||||
class PatternLayout; | ||||
typedef helpers::ObjectPtrT<PatternLayout> PatternLayoutPtr; | ||||
/** | ||||
A flexible layout configurable with pattern string. | ||||
<p>The goal of this class is to #format a {@link | ||||
spi::LoggingEvent LoggingEvent} and return the results as a string. | ||||
The results depend on the <em>conversion pattern</em>. | ||||
<p>The conversion pattern is closely related to the conversion | ||||
pattern of the printf function in C. A conversion pattern is | ||||
composed of literal text and format control expressions called | ||||
<em>conversion specifiers</em>. | ||||
<p><i>You are free to insert any literal text within the conversion | ||||
pattern.</i> | ||||
<p>Each conversion specifier starts with a percent sign (\%) and is | ||||
followed by optional <em>format modifiers</em> and a <em>conversion | ||||
character</em>. The conversion character specifies the type of | ||||
data, e.g. logger, priority, date, thread name. The format | ||||
modifiers control such things as field width, padding, left and | ||||
right justification. The following is a simple example. | ||||
<p>Let the conversion pattern be <b>"\%-5p [\%t]: \%m\%n"</b> and as | ||||
sume | ||||
that the log4cxx environment was set to use a PatternLayout. Then th | ||||
e | ||||
statements | ||||
<pre> | ||||
LoggerPtr root = Logger::getRoot(); | ||||
root->debug("Message 1"); | ||||
root->warn("Message 2"); | ||||
</pre> | ||||
would yield the output | ||||
<pre> | ||||
DEBUG [main]: Message 1 | ||||
WARN [main]: Message 2 | ||||
</pre> | ||||
<p>Note that there is no explicit separator between text and | ||||
conversion specifiers. The pattern parser knows when it has reached | ||||
the end of a conversion specifier when it reads a conversion | ||||
character. In the example above the conversion specifier | ||||
<b>\%-5p</b> means the priority of the logging event should be left | ||||
justified to a width of five characters. | ||||
The recognized conversion characters are | ||||
<p> | ||||
<table border="1" CELLPADDING="8"> | ||||
<tr> | ||||
<td align=center><b>Conversion Character</b></td> | ||||
<td align=center><b>Effect</b></td> | ||||
</tr> | ||||
<tr> | ||||
<td align=center><b>c</b></td> | ||||
<td>Used to output the logger of the logging event. The | /** | |||
logger conversion specifier can be optionally followed by | ||||
<em>precision specifier</em>, that is a decimal constant in | ||||
brackets. | ||||
<p>If a precision specifier is given, then only the corresponding | A flexible layout configurable with pattern string. | |||
number of right most components of the logger name will be | ||||
printed. By default the logger name is printed in full. | ||||
<p>For example, for the logger name "a.b.c" the pattern | <p>The goal of this class is to #format a {@link | |||
<b>\%c{2}</b> will output "b.c". | spi::LoggingEvent LoggingEvent} and return the results as a string. | |||
The results depend on the <em>conversion pattern</em>. | ||||
</td> | <p>The conversion pattern is closely related to the conversion | |||
</tr> | pattern of the printf function in C. A conversion pattern is | |||
composed of literal text and format control expressions called | ||||
<em>conversion specifiers</em>. | ||||
<tr> <td align=center><b>d</b></td> <td>Used to output the date of | <p><i>You are free to insert any literal text within the conversion | |||
the logging event. The date conversion specifier may be | pattern.</i> | |||
followed by a <em>date format specifier</em> enclosed between | ||||
braces. For example, <b>\%d{\%H:\%M:\%S}</b> or | ||||
<b>\%d{\%d \%b \%Y \%H:\%M:\%S}</b>. If no | ||||
date format specifier is given then {@link helpers::ISO8601DateForma | ||||
t | ||||
ISO8601 format} is assumed. | ||||
<p>The Following format options are possible: | <p>Each conversion specifier starts with a percent sign (\%) and is | |||
- %a -- Abbreviated weekday name | followed by optional <em>format modifiers</em> and a <em>conversion | |||
- %A -- Full weekday name | character</em>. The conversion character specifies the type of | |||
- %b -- Abbreviated month name | data, e.g. logger, level, date, thread name. The format | |||
- %B -- Full month name | modifiers control such things as field width, padding, left and | |||
- %c -- Standard date and time string | right justification. The following is a simple example. | |||
- %d -- Day of month as a decimal(1-31) | ||||
- %H -- Hour(0-23) | ||||
- %I -- Hour(1-12) | ||||
- %j -- Day of year as a decimal(1-366) | ||||
- %m -- Month as decimal(1-12) | ||||
- %M -- Minute as decimal(00-59) | ||||
- %p -- Locale's equivalent of AM or PM | ||||
- %Q -- Millisecond as decimal (000-999) | ||||
- %S -- Second as decimal(00-59) | ||||
- %U -- Week of year, Sunday being first day(0-53) | ||||
- %w -- Weekday as a decimal(0-6, Sunday being 0) | ||||
- %W -- Week of year, Monday being first day(0-53) | ||||
- %x -- Standard date string | ||||
- %X -- Standard time string | ||||
- %y -- Year in decimal without century(0-99) | ||||
- %Y -- Year including century as decimal | ||||
- %Z -- Time zone name | ||||
- %% -- The percent sign | ||||
<p>Lookup the documentation for the <code>strftime()</code> function | <p>Let the conversion pattern be <b>"\%-5p [\%t]: \%m\%n"</b> and a | |||
found in the <code><ctime></code> header for more information. | ssume | |||
that the log4cxx environment was set to use a PatternLayout. Then t | ||||
he | ||||
statements | ||||
<pre> | ||||
LoggerPtr root = Logger::getRoot(); | ||||
root->debug("Message 1"); | ||||
root->warn("Message 2"); | ||||
</pre> | ||||
would yield the output | ||||
<pre> | ||||
DEBUG [main]: Message 1 | ||||
WARN [main]: Message 2 | ||||
</pre> | ||||
<p>You can alos use the log4cxx predefined date | <p>Note that there is no explicit separator between text and | |||
formatters. These can be specified using one of the strings | conversion specifiers. The pattern parser knows when it has reached | |||
"ABSOLUTE", "DATE" and "ISO8601" for specifying {@link | the end of a conversion specifier when it reads a conversion | |||
helpers::AbsoluteTimeDateFormat | character. In the example above the conversion specifier | |||
AbsoluteTimeDateFormat}, {@link | <b>\%-5p</b> means the level of the logging event should be left | |||
helpers::DateTimeDateFormat DateTimeDateFormat} | justified to a width of five characters. | |||
and respectively {@link | ||||
helpers::ISO8601DateFormat | ||||
ISO8601DateFormat}. For example, <b>\%d{ISO8601}</b> or | ||||
<b>\%d{ABSOLUTE}</b>. | ||||
</td> | The recognized conversion characters are | |||
</tr> | ||||
<tr> | <p> | |||
<td align=center><b>F</b></td> | <table border="1" CELLPADDING="8"> | |||
<tr> | ||||
<td align=center><b>Conversion Character</b></td> | ||||
<td align=center><b>Effect</b></td> | ||||
</tr> | ||||
<td>Used to output the file name where the logging request was | <tr> | |||
issued. | <td align=center><b>c</b></td> | |||
<p><b>WARNING</b> Generating caller location information is | <td>Used to output the logger of the logging event. The | |||
extremely slow. It's use should be avoided unless execution speed | logger conversion specifier can be optionally followed by | |||
is not an issue. | <em>precision specifier</em>, that is a decimal constant in | |||
brackets. | ||||
</tr> | <p>If a precision specifier is given, then only the corresponding | |||
number of right most components of the logger name will be | ||||
printed. By default the logger name is printed in full. | ||||
<tr> | <p>For example, for the logger name "a.b.c" the pattern | |||
<td align=center><b>l</b></td> | <b>\%c{2}</b> will output "b.c". | |||
<td>Used to output location information of the caller which generate | </td> | |||
d | </tr> | |||
the logging event. | ||||
<p>The location information can be very useful. However, it's | <tr> <td align=center><b>d</b></td> <td>Used to output the date of | |||
generation is <em>extremely</em> slow. It's use should be avoided | the logging event. The date conversion specifier may be | |||
unless execution speed is not an issue. | followed by a set of braces containing a | |||
date and time pattern string compatible with java.text.SimpleDateF | ||||
ormat, | ||||
<em>ABSOLUTE</em>, <em>DATE</em> or <em>ISO8601</em>. | ||||
For example, <b>%d{HH:mm:ss,SSS}</b>, | ||||
<b>%d{dd MMM yyyy HH:mm:ss,SSS}</b> or | ||||
<b>%d{DATE}</b>. If no date format specifier is given then | ||||
ISO8601 format is assumed. | ||||
</td> | ||||
</tr> | ||||
</td> | <tr> | |||
</tr> | <td align=center><b>F</b></td> | |||
<tr> | <td>Used to output the file name where the logging request was | |||
<td align=center><b>L</b></td> | issued. | |||
<td>Used to output the line number from where the logging request | </tr> | |||
was issued. | ||||
<p><b>WARNING</b> Generating caller location information is | <tr> | |||
extremely slow. It's use should be avoided unless execution speed | <td align=center><b>l</b></td> | |||
is not an issue. | ||||
</tr> | <td>Used to output location information of the caller which generat | |||
ed | ||||
the logging event. | ||||
<tr> | </td> | |||
<td align=center><b>m</b></td> | </tr> | |||
<td>Used to output the application supplied message associated with | ||||
the logging event.</td> | ||||
</tr> | ||||
<tr> | <tr> | |||
<td align=center><b>n</b></td> | <td align=center><b>L</b></td> | |||
<td>Outputs the platform dependent line separator character or | <td>Used to output the line number from where the logging request | |||
characters. | was issued. | |||
</tr> | ||||
<p>This conversion character offers practically the same | <tr> | |||
performance as using non-portable line separator strings such as | <td align=center><b>m</b></td> | |||
"\n", or "\r\n". Thus, it is the preferred way of specifying a | <td>Used to output the application supplied message associated with | |||
line separator. | the logging event.</td> | |||
</tr> | ||||
</tr> | <tr> | |||
<td align=center><b>n</b></td> | ||||
<tr> | <td>Outputs the platform dependent line separator character or | |||
<td align=center><b>p</b></td> | characters. | |||
<td>Used to output the level(priority) of the logging event.</td> | ||||
</tr> | ||||
<tr> | <p>This conversion character offers practically the same | |||
performance as using non-portable line separator strings such as | ||||
"\n", or "\r\n". Thus, it is the preferred way of specifying a | ||||
line separator. | ||||
<td align=center><b>r</b></td> | </tr> | |||
<td>Used to output the number of milliseconds elapsed since the star | <tr> | |||
t | <td align=center><b>p</b></td> | |||
of the application until the creation of the logging event.</td> | <td>Used to output the level of the logging event.</td> | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td align=center><b>t</b></td> | ||||
<td>Used to output the name of the thread that generated the | <td align=center><b>r</b></td> | |||
logging event.</td> | ||||
</tr> | <td>Used to output the number of milliseconds elapsed since the sta | |||
rt | ||||
of the application until the creation of the logging event.</td> | ||||
</tr> | ||||
<tr> | <tr> | |||
<td align=center><b>t</b></td> | ||||
<td align=center><b>x</b></td> | <td>Used to output the name of the thread that generated the | |||
logging event.</td> | ||||
<td>Used to output the NDC (nested diagnostic context) associated | </tr> | |||
with the thread that generated the logging event. | ||||
</td> | ||||
</tr> | ||||
<tr> | <tr> | |||
<td align=center><b>X</b></td> | ||||
<td> | <td align=center><b>x</b></td> | |||
<p>Used to output the MDC (mapped diagnostic context) associated | <td>Used to output the NDC (nested diagnostic context) associated | |||
with the thread that generated the logging event. The <b>X</b> | with the thread that generated the logging event. | |||
conversion character <em>must</em> be followed by the key for the | </td> | |||
map placed between braces, as in <b>\%X{clientNumber}</b> where | </tr> | |||
<code>clientNumber</code> is the key. The value in the MDC | ||||
corresponding to the key will be output.</p> | ||||
<p>See MDC class for more details. | <tr> | |||
</p> | <td align=center><b>X</b></td> | |||
</td> | <td> | |||
</tr> | ||||
<tr> | <p>Used to output the MDC (mapped diagnostic context) associated | |||
with the thread that generated the logging event. The <b>X</b> | ||||
conversion character <em>must</em> be followed by the key for the | ||||
map placed between braces, as in <b>\%X{clientNumber}</b> where | ||||
<code>clientNumber</code> is the key. The value in the MDC | ||||
corresponding to the key will be output.</p> | ||||
<td align=center><b>\%</b></td> | <p>See MDC class for more details. | |||
</p> | ||||
<td>The sequence \%\% outputs a single percent sign. | </td> | |||
</td> | </tr> | |||
</tr> | ||||
</table> | <tr> | |||
<p>By default the relevant information is output as is. However, | <td align=center><b>\%</b></td> | |||
with the aid of format modifiers it is possible to change the | ||||
minimum field width, the maximum field width and justification. | ||||
<p>The optional format modifier is placed between the percent sign | <td>The sequence \%\% outputs a single percent sign. | |||
and the conversion character. | </td> | |||
</tr> | ||||
<p>The first optional format modifier is the <em>left justification | </table> | |||
flag</em> which is just the minus (-) character. Then comes the | ||||
optional <em>minimum field width</em> modifier. This is a decimal | ||||
constant that represents the minimum number of characters to | ||||
output. If the data item requires fewer characters, it is padded on | ||||
either the left or the right until the minimum width is | ||||
reached. The default is to pad on the left (right justify) but you | ||||
can specify right padding with the left justification flag. The | ||||
padding character is space. If the data item is larger than the | ||||
minimum field width, the field is expanded to accommodate the | ||||
data. The value is never truncated. | ||||
<p>This behavior can be changed using the <em>maximum field | <p>By default the relevant information is output as is. However, | |||
width</em> modifier which is designated by a period followed by a | with the aid of format modifiers it is possible to change the | |||
decimal constant. If the data item is longer than the maximum | minimum field width, the maximum field width and justification. | |||
field, then the extra characters are removed from the | ||||
<em>beginning</em> of the data item and not from the end. For | ||||
example, it the maximum field width is eight and the data item is | ||||
ten characters long, then the first two characters of the data item | ||||
are dropped. This behavior deviates from the printf function in C | ||||
where truncation is done from the end. | ||||
<p>Below are various format modifier examples for the logger | <p>The optional format modifier is placed between the percent sign | |||
conversion specifier. | and the conversion character. | |||
<p> | <p>The first optional format modifier is the <em>left justification | |||
<TABLE BORDER=1 CELLPADDING=8> | flag</em> which is just the minus (-) character. Then comes the | |||
<tr> | optional <em>minimum field width</em> modifier. This is a decimal | |||
<td align=center><b>Format modifier</b></td> | constant that represents the minimum number of characters to | |||
<td align=center><b>left justify</b></td> | output. If the data item requires fewer characters, it is padded on | |||
<td align=center><b>minimum width</b></td> | either the left or the right until the minimum width is | |||
<td align=center><b>maximum width</b></td> | reached. The default is to pad on the left (right justify) but you | |||
<td align=center><b>comment</b></td> | can specify right padding with the left justification flag. The | |||
</tr> | padding character is space. If the data item is larger than the | |||
minimum field width, the field is expanded to accommodate the | ||||
data. The value is never truncated. | ||||
<tr> | <p>This behavior can be changed using the <em>maximum field | |||
<td align=center>\%20c</td> | width</em> modifier which is designated by a period followed by a | |||
<td align=center>false</td> | decimal constant. If the data item is longer than the maximum | |||
<td align=center>20</td> | field, then the extra characters are removed from the | |||
<td align=center>none</td> | <em>beginning</em> of the data item and not from the end. For | |||
example, it the maximum field width is eight and the data item is | ||||
ten characters long, then the first two characters of the data item | ||||
are dropped. This behavior deviates from the printf function in C | ||||
where truncation is done from the end. | ||||
<td>Left pad with spaces if the logger name is less than 20 | <p>Below are various format modifier examples for the logger | |||
characters long. | conversion specifier. | |||
<tr> <td align=center>\%-20c</td> <td align=center>true</td> <td | <p> | |||
align=center>20</td> <td align=center>none</td> <td>Right pad with | <TABLE BORDER=1 CELLPADDING=8> | |||
spaces if the logger name is less than 20 characters long. | <tr> | |||
<td align=center><b>Format modifier</b></td> | ||||
<td align=center><b>left justify</b></td> | ||||
<td align=center><b>minimum width</b></td> | ||||
<td align=center><b>maximum width</b></td> | ||||
<td align=center><b>comment</b></td> | ||||
</tr> | ||||
<tr> | <tr> | |||
<td align=center>\%.30c</td> | <td align=center>\%20c</td> | |||
<td align=center>NA</td> | <td align=center>false</td> | |||
<td align=center>none</td> | <td align=center>20</td> | |||
<td align=center>30</td> | <td align=center>none</td> | |||
<td>Truncate from the beginning if the logger name is longer than 30 | <td>Left pad with spaces if the logger name is less than 20 | |||
characters. | characters long. | |||
<tr> | <tr> <td align=center>\%-20c</td> <td align=center>true</td> <td | |||
<td align=center>\%20.30c</td> | align=center>20</td> <td align=center>none</td> <td>Right pad with | |||
<td align=center>false</td> | spaces if the logger name is less than 20 characters long. | |||
<td align=center>20</td> | ||||
<td align=center>30</td> | ||||
<td>Left pad with spaces if the logger name is shorter than 20 | <tr> | |||
characters. However, if logger name is longer than 30 characters, | <td align=center>\%.30c</td> | |||
then truncate from the beginning. | <td align=center>NA</td> | |||
<td align=center>none</td> | ||||
<td align=center>30</td> | ||||
<tr> | <td>Truncate from the beginning if the logger name is longer than 3 | |||
<td align=center>\%-20.30c</td> | 0 | |||
<td align=center>true</td> | characters. | |||
<td align=center>20</td> | ||||
<td align=center>30</td> | ||||
<td>Right pad with spaces if the logger name is shorter than 20 | <tr> | |||
characters. However, if logger name is longer than 30 characters, | <td align=center>\%20.30c</td> | |||
then truncate from the beginning. | <td align=center>false</td> | |||
<td align=center>20</td> | ||||
<td align=center>30</td> | ||||
</table> | <td>Left pad with spaces if the logger name is shorter than 20 | |||
characters. However, if logger name is longer than 30 characters, | ||||
then truncate from the beginning. | ||||
<p>Below are some examples of conversion patterns. | <tr> | |||
<td align=center>\%-20.30c</td> | ||||
<td align=center>true</td> | ||||
<td align=center>20</td> | ||||
<td align=center>30</td> | ||||
<p><b>\%r [\%t] \%-5p \%c \%x - \%m\n</b> | <td>Right pad with spaces if the logger name is shorter than 20 | |||
<p>This is essentially the TTCC layout. | characters. However, if logger name is longer than 30 characters, | |||
then truncate from the beginning. | ||||
<p><b>\%-6r [\%15.15t] \%-5p \%30.30c \%x - \%m\n</b> | </table> | |||
<p>Similar to the TTCC layout except that the relative time is | <p>Below are some examples of conversion patterns. | |||
right padded if less than 6 digits, thread name is right padded if | ||||
less than 15 characters and truncated if longer and the logger | ||||
name is left padded if shorter than 30 characters and truncated if | ||||
longer. | ||||
<p>The above text is largely inspired from Peter A. Darnell and | <p><b>\%r [\%t] \%-5p \%c \%x - \%m\n</b> | |||
Philip E. Margolis' highly recommended book "C -- a Software | <p>This is essentially the TTCC layout. | |||
Engineering Approach", ISBN 0-387-97389-3. | ||||
*/ | ||||
class LOG4CXX_EXPORT PatternLayout : public Layout | ||||
{ | ||||
public: | ||||
/** Default pattern string for log output. Currently set to | ||||
the | ||||
string <b>"\%m\%n"</b> which just prints the application sup | ||||
plied | ||||
message. */ | ||||
static String DEFAULT_CONVERSION_PATTERN; | ||||
/** A conversion pattern equivalent to the TTCCCLayout. | <p><b>\%-6r [\%15.15t] \%-5p \%30.30c \%x - \%m\n</b> | |||
Current value is <b>\%r [\%t] \%p \%c \%x - \%m\%n</b>. */ | ||||
static String TTCC_CONVERSION_PATTERN; | ||||
protected: | <p>Similar to the TTCC layout except that the relative time is | |||
static int BUF_SIZE; | right padded if less than 6 digits, thread name is right padded if | |||
static int MAX_CAPACITY; | less than 15 characters and truncated if longer and the logger | |||
name is left padded if shorter than 30 characters and truncated if | ||||
longer. | ||||
private: | <p>The above text is largely inspired from Peter A. Darnell and | |||
// output buffer appended to when format() is invoked | Philip E. Margolis' highly recommended book "C -- a Software | |||
StringBuffer sbuf; | Engineering Approach", ISBN 0-387-97389-3. | |||
String pattern; | */ | |||
helpers::PatternConverterPtr head; | class LOG4CXX_EXPORT PatternLayout : public Layout | |||
String timeZone; | { | |||
/** | ||||
* Conversion pattern. | ||||
*/ | ||||
LogString conversionPattern; | ||||
public: | /** | |||
DECLARE_LOG4CXX_OBJECT(PatternLayout) | * Pattern converters. | |||
BEGIN_LOG4CXX_CAST_MAP() | */ | |||
LOG4CXX_CAST_ENTRY(PatternLayout) | LOG4CXX_LIST_DEF(LoggingEventPatternConverterList, log4cxx: | |||
LOG4CXX_CAST_ENTRY_CHAIN(Layout) | :pattern::LoggingEventPatternConverterPtr); | |||
END_LOG4CXX_CAST_MAP() | LoggingEventPatternConverterList patternConverters; | |||
/** | /** | |||
Does nothing | * Field widths and alignment corresponding to pattern conve | |||
*/ | rters. | |||
PatternLayout(); | */ | |||
LOG4CXX_LIST_DEF(FormattingInfoList, log4cxx::pattern::Form | ||||
attingInfoPtr); | ||||
FormattingInfoList patternFields; | ||||
/** | public: | |||
Constructs a PatternLayout using the supplied conversion pat | DECLARE_LOG4CXX_OBJECT(PatternLayout) | |||
tern. | BEGIN_LOG4CXX_CAST_MAP() | |||
*/ | LOG4CXX_CAST_ENTRY(PatternLayout) | |||
PatternLayout(const String& pattern); | LOG4CXX_CAST_ENTRY_CHAIN(Layout) | |||
END_LOG4CXX_CAST_MAP() | ||||
/** | /** | |||
Set the <b>ConversionPattern</b> option. This is the string | Does nothing | |||
which | */ | |||
controls formatting and consists of a mix of literal content | PatternLayout(); | |||
and | ||||
conversion specifiers. | ||||
*/ | ||||
void setConversionPattern(const String& conversionPattern); | ||||
/** | /** | |||
Returns the value of the <b>ConversionPattern</b> option. | Constructs a PatternLayout using the supplied conversion pa | |||
*/ | ttern. | |||
inline String getConversionPattern() const | */ | |||
{ return pattern; } | PatternLayout(const LogString& pattern); | |||
/** | /** | |||
Call createPatternParser | Set the <b>ConversionPattern</b> option. This is the string | |||
*/ | which | |||
virtual void activateOptions(); | controls formatting and consists of a mix of literal conten | |||
t and | ||||
conversion specifiers. | ||||
*/ | ||||
void setConversionPattern(const LogString& conversionPatter | ||||
n); | ||||
virtual void setOption(const String& option, const String& v | /** | |||
alue); | Returns the value of the <b>ConversionPattern</b> option. | |||
*/ | ||||
inline LogString getConversionPattern() const | ||||
{ return conversionPattern; } | ||||
/** | /** | |||
The PatternLayout does not handle the throwable contained wi | Call createPatternParser | |||
thin | */ | |||
{@link spi::LoggingEvent LoggingEvents}. Thus, it returns | virtual void activateOptions(log4cxx::helpers::Pool& p); | |||
<code>true</code>. | ||||
*/ | ||||
virtual bool ignoresThrowable() const | ||||
{ return true; } | ||||
/** | virtual void setOption(const LogString& option, const LogSt | |||
Produces a formatted string as specified by the conversion p | ring& value); | |||
attern. | ||||
*/ | ||||
virtual void format(ostream& output, const spi::LoggingEvent | ||||
Ptr& event) const; | ||||
/** | /** | |||
The <b>TimeZoneID</b> option is a time zone ID string in the | The PatternLayout does not handle the throwable contained w | |||
format | ithin | |||
expected by the <code>locale</code> C++ standard class. | {@link spi::LoggingEvent LoggingEvents}. Thus, it returns | |||
*/ | <code>true</code>. | |||
inline void setTimeZone(const String& timeZone) | */ | |||
{ this->timeZone = timeZone; } | virtual bool ignoresThrowable() const | |||
{ return true; } | ||||
/** | /** | |||
Returns value of the <b>TimeZone</b> option. | Produces a formatted string as specified by the conversion | |||
*/ | pattern. | |||
inline const String& getTimeZone() const | */ | |||
{ return timeZone; } | virtual void format(LogString& output, | |||
const spi::LoggingEventPtr& event, log4cxx::helpers::P | ||||
ool& pool) const; | ||||
protected: | protected: | |||
/** | virtual log4cxx::pattern::PatternMap getFormatSpecifiers(); | |||
Returns head of PatternParser used to parse the conversion s | }; | |||
tring. | LOG4CXX_PTR_DEF(PatternLayout); | |||
Subclasses may override this to return a subclass of Pattern | ||||
Parser | ||||
which recognize custom conversion characters. | ||||
*/ | ||||
virtual helpers::PatternConverterPtr createPatternParser(con | ||||
st String& pattern); | ||||
}; | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_PATTERN_LAYOUT_H | #endif //_LOG4CXX_PATTERN_LAYOUT_H | |||
End of changes. 86 change blocks. | ||||
383 lines changed or deleted | 316 lines changed or added | |||
patternparser.h | patternparser.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_PATTERN_PARSER_H | #ifndef _LOG4CXX_HELPER_PATTERN_CONVERTER_H | |||
#define _LOG4CXX_HELPER_PATTERN_PARSER_H | #define _LOG4CXX_HELPER_PATTERN_CONVERTER_H | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <log4cxx/helpers/formattinginfo.h> | ||||
#include <log4cxx/helpers/patternconverter.h> | ||||
namespace log4cxx | ||||
{ | ||||
namespace spi | ||||
{ | ||||
class LoggingEvent; | ||||
typedef helpers::ObjectPtrT<LoggingEvent> LoggingEventPtr; | ||||
} | ||||
namespace helpers | ||||
{ | ||||
class DateFormat; | ||||
/** | ||||
Most of the work of the PatternLayout class | ||||
is delegated to the PatternParser class. | ||||
<p>It is this class that parses conversion patterns and creates | ||||
a chained list of {@link helpers::OptionConverter OptionConverters}. | ||||
*/ | ||||
class LOG4CXX_EXPORT PatternParser | ||||
{ | ||||
protected: | ||||
int state; | ||||
StringBuffer currentLiteral; | ||||
int patternLength; | ||||
int i; | ||||
PatternConverterPtr head; | ||||
PatternConverterPtr tail; | ||||
FormattingInfo formattingInfo; | ||||
String pattern; | ||||
String timeZone; | ||||
public: | ||||
PatternParser(const String& pattern, const String& t | ||||
imeZone); | ||||
private: | ||||
void addToList(PatternConverterPtr& pc); | ||||
protected: | #if defined(_MSC_VER) | |||
String extractOption(); | #pragma warning (push) | |||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
/** | #include <map> | |||
The option is expected to be in decimal and positive | #include <vector> | |||
. In case of | #include <log4cxx/helpers/class.h> | |||
error, zero is returned. */ | #include <log4cxx/pattern/patternconverter.h> | |||
int extractPrecisionOption(); | #include <log4cxx/pattern/formattinginfo.h> | |||
public: | namespace log4cxx { | |||
PatternConverterPtr parse(); | namespace pattern { | |||
protected: | typedef PatternConverterPtr (*PatternConstructor)(const std::vector<LogStri | |||
void finalizeConverter(TCHAR c); | ng>& options); | |||
typedef std::map<LogString, PatternConstructor> PatternMap; | ||||
void addConverter(PatternConverterPtr& pc); | // Contributors: Nelson Minar <(nelson@monkey.org> | |||
// Igor E. Poteryaev <jah@mail.ru> | ||||
// Reinhard Deschler <reinhard.deschler@web.de> | ||||
// --------------------------------------------------------- | /** | |||
------------ | * Most of the work of the {@link log4cxx::PatternLayout PatternLayout} cla | |||
// PatternConverters | ss | |||
// --------------------------------------------------------- | * is delegated to the PatternParser class. | |||
------------ | * <p>It is this class that parses conversion patterns and creates | |||
private: | * a chained list of {@link PatternConverter PatternConverters}. | |||
class LOG4CXX_EXPORT BasicPatternConverter : public | * | |||
PatternConverter | * | |||
{ | */ | |||
private: | class LOG4CXX_EXPORT PatternParser { | |||
int type; | /** | |||
public: | * Escape character for format specifier. | |||
BasicPatternConverter(const FormattingInfo& | */ | |||
formattingInfo, int type); | static const logchar ESCAPE_CHAR; | |||
virtual void convert(ostream& sbuf, | ||||
const spi::LoggingEventPtr& event) c | ||||
onst; | ||||
}; | ||||
class LOG4CXX_EXPORT LiteralPatternConverter : publi | enum { | |||
c PatternConverter | LITERAL_STATE = 0, | |||
{ | CONVERTER_STATE = 1, | |||
private: | DOT_STATE = 3, | |||
String literal; | MIN_STATE = 4, | |||
MAX_STATE = 5 | ||||
}; | ||||
public: | /** | |||
LiteralPatternConverter(const String& value) | * Private constructor. | |||
; | */ | |||
virtual void format(StringBuffer& sbuf, | PatternParser(); | |||
const spi::LoggingEventPtr& e) const | ||||
; | ||||
virtual void convert(ostream& sbuf, | ||||
const spi::LoggingEventPtr& event) c | ||||
onst; | ||||
}; | ||||
class LOG4CXX_EXPORT DatePatternConverter : public P | private: | |||
atternConverter | /** Extract the converter identifier found at position i. | |||
{ | * | |||
private: | * After this function returns, the variable i will point to the | |||
DateFormat * df; | * first char after the end of the converter identifier. | |||
* | ||||
* If i points to a char which is not a character acceptable at the | ||||
* start of a unicode identifier, the value null is returned. | ||||
* | ||||
* @param lastChar last processed character. | ||||
* @param pattern format string. | ||||
* @param i current index into pattern format. | ||||
* @param convBuf buffer to receive conversion specifier. | ||||
* @param currentLiteral literal to be output in case format specifier in | ||||
unrecognized. | ||||
* @return position in pattern after converter. | ||||
*/ | ||||
static int extractConverter( | ||||
logchar lastChar, const LogString& pattern, | ||||
LogString::size_type i, LogString& convBuf, | ||||
LogString& currentLiteral); | ||||
public: | /** | |||
DatePatternConverter(const FormattingInfo& f | * Extract options. | |||
ormattingInfo, | * @param pattern conversion pattern. | |||
DateFormat * df); | * @param i start of options. | |||
~DatePatternConverter(); | * @param options array to receive extracted options | |||
* @return position in pattern after options. | ||||
*/ | ||||
static int extractOptions(const LogString& pattern, LogString::size_type | ||||
i, | ||||
std::vector<LogString>& options); | ||||
public: | public: | |||
virtual void convert(ostream& sbuf, | /** | |||
const spi::LoggingEventPtr& event) c | * Parse a format specifier. | |||
onst; | * @param pattern pattern to parse. | |||
}; | * @param patternConverters list to receive pattern converters. | |||
* @param formattingInfos list to receive field specifiers corresponding | ||||
to pattern converters. | ||||
* @param rules map of stock pattern converters keyed by format specifier | ||||
. | ||||
*/ | ||||
static void parse( | ||||
const LogString& pattern, | ||||
std::vector<PatternConverterPtr>& patternConverters, | ||||
std::vector<FormattingInfoPtr>& formattingInfos, | ||||
const PatternMap& rules); | ||||
class LOG4CXX_EXPORT MDCPatternConverter : public Pa | private: | |||
tternConverter | /** | |||
{ | * Creates a new PatternConverter. | |||
private: | * | |||
String key; | * | |||
* @param converterId converterId. | ||||
* @param currentLiteral literal to be used if converter is unrecognized | ||||
or following converter | ||||
* if converterId contains extra characters. | ||||
* @param rules map of stock pattern converters keyed by format specifier | ||||
. | ||||
* @param options converter options. | ||||
* @return converter or null. | ||||
*/ | ||||
static PatternConverterPtr createConverter( | ||||
const LogString& converterId, | ||||
LogString& currentLiteral, | ||||
const PatternMap& rules, | ||||
std::vector<LogString>& options); | ||||
public: | /** | |||
MDCPatternConverter(const FormattingInfo& fo | * Processes a format specifier sequence. | |||
rmattingInfo, | * | |||
const String& key); | * @param c initial character of format specifier. | |||
virtual void convert(ostream& sbuf, | * @param pattern conversion pattern | |||
const spi::LoggingEventPtr& event) c | * @param i current position in conversion pattern. | |||
onst; | * @param currentLiteral current literal. | |||
}; | * @param formattingInfo current field specifier. | |||
* @param rules map of stock pattern converters keyed by format specifier | ||||
. | ||||
* @param patternConverters list to receive parsed pattern converter. | ||||
* @param formattingInfos list to receive corresponding field specifier. | ||||
* @return position after format specifier sequence. | ||||
*/ | ||||
static int finalizeConverter( | ||||
logchar c, const LogString& pattern, int i, | ||||
LogString& currentLiteral, const FormattingInfoPtr& formattingInfo, | ||||
const PatternMap& rules, | ||||
std::vector<PatternConverterPtr>& patternConverters, | ||||
std::vector<FormattingInfoPtr>& formattingInfos); | ||||
class LOG4CXX_EXPORT LocationPatternConverter : publ | static bool isUnicodeIdentifierStart(logchar c); | |||
ic PatternConverter | static bool isUnicodeIdentifierPart(logchar c); | |||
{ | ||||
private: | ||||
int type; | ||||
public: | }; | |||
LocationPatternConverter(const FormattingInf | ||||
o& formattingInfo, int type); | ||||
virtual void convert(ostream& sbuf, | ||||
const spi::LoggingEventPtr& event) c | ||||
onst; | ||||
}; | ||||
class LOG4CXX_EXPORT CategoryPatternConverter : publ | } | |||
ic PatternConverter | } | |||
{ | ||||
private: | ||||
int precision; | ||||
public: | #if defined(_MSC_VER) | |||
CategoryPatternConverter(const FormattingInf | #pragma warning (pop) | |||
o& formattingInfo, | #endif | |||
int precision); | ||||
virtual void convert(ostream& sbuf, | ||||
const spi::LoggingEventPtr& event) c | ||||
onst; | ||||
}; | ||||
}; // class PatternParser | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPER_PATTERN_PARSER_H | #endif | |||
End of changes. 20 change blocks. | ||||
154 lines changed or deleted | 143 lines changed or added | |||
properties.h | properties.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPER_PROPERTIES_H | #ifndef _LOG4CXX_HELPER_PROPERTIES_H | |||
#define _LOG4CXX_HELPER_PROPERTIES_H | #define _LOG4CXX_HELPER_PROPERTIES_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning (push) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/inputstream.h> | ||||
#include <map> | #include <map> | |||
#include <vector> | #include <vector> | |||
#include <istream> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT Properties | class LOG4CXX_EXPORT Properties | |||
{ | { | |||
private: | private: | |||
std::map<String, String> properties; | typedef std::map<LogString, LogString> PropertyMap; | |||
PropertyMap* properties; | ||||
Properties(const Properties&); | ||||
Properties& operator=(const Properties&); | ||||
public: | public: | |||
/** | /** | |||
Reads a property list (key and element pairs) from t | * Create new instance. | |||
he input stream. | */ | |||
The stream is assumed to be using the ISO 8859-1 cha | Properties(); | |||
racter encoding. | /** | |||
* Destructor. | ||||
*/ | ||||
~Properties(); | ||||
/** | ||||
Reads a property list (key and element pairs) from | ||||
the input stream. | ||||
The stream is assumed to be using the ISO 8859-1 ch | ||||
aracter encoding. | ||||
<p>Every property occupies one line of the input str | <p>Every property occupies one line of the input st | |||
eam. | ream. | |||
Each line is terminated by a line terminator (<code> | Each line is terminated by a line terminator (<code | |||
\\n</code> or | >\\n</code> or | |||
<code>\r</code> or <code>\r\\n</code>). | <code>\\r</code> or <code>\\r\\n</code>). | |||
Lines from the input stream are processed until end | Lines from the input stream are processed until end | |||
of file is reached | of file is reached | |||
on the input stream. | on the input stream. | |||
<p>A line that contains only whitespace or whose fir | <p>A line that contains only whitespace or whose fi | |||
st non-whitespace | rst non-whitespace | |||
character is an ASCII <code>#</code> or <code>!</cod | character is an ASCII <code>#</code> or <code>!</co | |||
e> is ignored | de> is ignored | |||
(thus, <code>#</code> or <code>!</code> indicate com | (thus, <code>#</code> or <code>!</code> indicate co | |||
ment lines). | mment lines). | |||
<p>Every line other than a blank line or a comment l | <p>Every line other than a blank line or a comment | |||
ine describes one | line describes one | |||
property to be added to the table (except that if a | property to be added to the table (except that if a | |||
line ends with \, | line ends with \, | |||
then the following line, if it exists, is treated as | then the following line, if it exists, is treated a | |||
a continuation | s a continuation | |||
line, as described below). The key consists of all t | line, as described below). The key consists of all | |||
he characters in | the characters in | |||
the line starting with the first non-whitespace char | the line starting with the first non-whitespace cha | |||
acter and up to, | racter and up to, | |||
but not including, the first ASCII <code>=</code | but not including, the first ASCII <code>=</code> | |||
>, <code>:</code>, | , <code>:</code>, | |||
or whitespace character. All of the | or whitespace character. All of the | |||
key termination characters may be included in the ke | key termination characters may be included in the k | |||
y by preceding them | ey by preceding them | |||
with a <code>\\</code>. Any whitespace after the key | with a <code>\\</code>. Any whitespace after the ke | |||
is skipped; | y is skipped; | |||
if the first | if the first | |||
non-whitespace character after the key is <code>=</c | non-whitespace character after the key is <code>=</ | |||
ode> or | code> or | |||
<code>:</code>, then it is ignored | <code>:</code>, then it is ignored | |||
and any whitespace characters after it are also skip | and any whitespace characters after it are also ski | |||
ped. All remaining | pped. All remaining | |||
characters on the line become part of the associated | characters on the line become part of the associate | |||
element string. | d element string. | |||
Within the element string, the ASCII escape sequence | Within the element string, the ASCII escape sequenc | |||
s <code>\t</code>, | es <code>\\t</code>, | |||
<code>\\n</code>, <code>\r</code>, <code>\\</code>, | <code>\\n</code>, <code>\\r</code>, <code>\\</code> | |||
<code>\"</code>, | , <code>\\"</code>, | |||
<code>\'</code>, <code>\\</code> (a backslash and a | <code>\\'</code>, <code>\\</code> (a backslash and | |||
space), and | a space), and | |||
<code>\uxxxx</code> are recognized | <code>\\uxxxx</code> are recognized | |||
and converted to single characters. Moreover, if the | and converted to single characters. Moreover, if th | |||
last character on | e last character on | |||
the line is <code>\\</code>, then the next line is t | the line is <code>\\</code>, then the next line is | |||
reated as a | treated as a | |||
continuation of the | continuation of the | |||
current line; the <code>\\</code> and line terminato | current line; the <code>\\</code> and line terminat | |||
r are simply | or are simply | |||
discarded, and any | discarded, and any | |||
leading whitespace characters on the continuation li | leading whitespace characters on the continuation l | |||
ne are also | ine are also | |||
discarded and are not part of the element string. | discarded and are not part of the element string. | |||
<p>As an example, each of the following four lines s | <p>As an example, each of the following four lines | |||
pecifies the key | specifies the key | |||
"Truth" and the associated element value "Beauty": | "Truth" and the associated element value "Beauty": | |||
<pre> | <pre> | |||
Truth = Beauty | Truth = Beauty | |||
Truth:Beauty | Truth:Beauty | |||
Truth :Beauty | Truth :Beauty | |||
</pre> | </pre> | |||
As another example, the following three lines specify a sing | As another example, the following three lines specify a sin | |||
le | gle | |||
property: | property: | |||
<pre> | <pre> | |||
fruits apple, banana, pear, \ | fruits apple, banana, pear, \ | |||
cantaloupe, watermelon, \ | cantaloupe, watermelon, \ | |||
kiwi, mango | kiwi, mango | |||
</pre> | </pre> | |||
The key is "<code>fruits</code>" and the associated | The key is "<code>fruits</code>" and the associated | |||
element is: | element is: | |||
<pre> | <pre> | |||
"apple, banana, pear, cantaloupe, watermelon, kiwi, mango" | "apple, banana, pear, cantaloupe, watermelon, kiwi, mango" | |||
</pre> | </pre> | |||
Note that a space appears before each \ so that a sp | Note that a space appears before each \ so that a s | |||
ace will appear | pace will appear | |||
after each comma in the final result; the \, line te | after each comma in the final result; the \, line t | |||
rminator, and | erminator, and | |||
leading whitespace on the continuation line are mere | leading whitespace on the continuation line are mer | |||
ly discarded and are | ely discarded and are | |||
not replaced by one or more other characters. | not replaced by one or more other characters. | |||
<p>As a third example, the line: | <p>As a third example, the line: | |||
<pre> | <pre> | |||
cheeses | cheeses | |||
</pre> | </pre> | |||
specifies that the key is "<code>cheeses</code>" and | specifies that the key is "<code>cheeses</code>" an | |||
the associated | d the associated | |||
element is the empty string. | element is the empty string. | |||
@param inStream the input stream. | @param inStream the input stream. | |||
@throw IOException if an error occurred when reading | @throw IOException if an error occurred when readin | |||
from the input | g from the input | |||
stream. | stream. | |||
*/ | */ | |||
void load(istream& inStream); | void load(InputStreamPtr inStream); | |||
/** | /** | |||
Calls the Hashtable method put. Provided for paralle | * Calls Properties::put. | |||
lism with the | * @param key the key to be placed into this prop | |||
getProperty method. Enforces use of strings for prop | erty list. | |||
erty keys and | * @param value the value corresponding to key. | |||
values. The value returned is the result of the Hash | * @return the previous value of the specified ke | |||
table call to | y in this | |||
put. | * property list, or an empty string if it did no | |||
@param key the key to be placed into this property l | t have one. | |||
ist. | */ | |||
@param value the value corresponding to key. | LogString setProperty(const LogString& key, const L | |||
@return the previous value of the specified key in this | ogString& value); | |||
property list, or an empty string if it did not have | /** | |||
one. | * Puts a property value into the collection. | |||
*/ | * @param key the key to be placed into this prop | |||
String setProperty(const String& key, const String& | erty list. | |||
value); | * @param value the value corresponding to key. | |||
* @return the previous value of the specified ke | ||||
y in this | ||||
* property list, or an empty string if it did no | ||||
t have one. | ||||
*/ | ||||
LogString put(const LogString& key, const LogString | ||||
& value); | ||||
/** | /** | |||
Searches for the property with the specified key in | * Calls Properties::get. | |||
this property | * @param key the property key. | |||
list. If the key is not found in this property list, | * @return the value in this property list with the | |||
the default | specified | |||
property list, and its defaults, recursively, are th | * key value or empty string. | |||
en checked. | */ | |||
The method returns an empty string if the property i | LogString getProperty(const LogString& key) const; | |||
s not found. | /** | |||
@param key the property key. | * Gets a property value. | |||
@return the value in this property list with the specified | * @param key the property key. | |||
key value. | * @return the value in this property list with the | |||
*/ | specified | |||
String getProperty(const String& key) const; | * key value or empty string. | |||
*/ | ||||
LogString get(const LogString& key) const; | ||||
/** | /** | |||
Returns an enumeration of all the keys in this prope | Returns an enumeration of all the keys in this prop | |||
rty list, | erty list, | |||
including distinct keys in the default property list | including distinct keys in the default property lis | |||
if a key | t if a key | |||
of the same name has not already been found from the | of the same name has not already been found from th | |||
main | e main | |||
properties list. | properties list. | |||
@return an array of all the keys in this | @return an array of all the keys in this | |||
property list, including the keys in the default pro | property list, including the keys in the default pr | |||
perty list. | operty list. | |||
*/ | */ | |||
std::vector<String> propertyNames() const; | std::vector<LogString> propertyNames() const; | |||
}; // class Properties | }; // class Properties | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif //_LOG4CXX_HELPER_PROPERTIES_H | #endif //_LOG4CXX_HELPER_PROPERTIES_H | |||
End of changes. 22 change blocks. | ||||
158 lines changed or deleted | 190 lines changed or added | |||
propertyconfigurator.h | propertyconfigurator.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_PROPERTY_CONFIGURATOR_H | #ifndef _LOG4CXX_PROPERTY_CONFIGURATOR_H | |||
#define _LOG4CXX_PROPERTY_CONFIGURATOR_H | #define _LOG4CXX_PROPERTY_CONFIGURATOR_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning (push) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/config.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <log4cxx/spi/configurator.h> | #include <log4cxx/spi/configurator.h> | |||
#include <map> | #include <map> | |||
#include <log4cxx/file.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | class Logger; | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | typedef helpers::ObjectPtrT<Logger> LoggerPtr; | |||
class Appender; | ||||
typedef helpers::ObjectPtrT<Appender> AppenderPtr; | ||||
namespace spi | class Appender; | |||
{ | typedef helpers::ObjectPtrT<Appender> AppenderPtr; | |||
class LoggerFactory; | ||||
typedef helpers::ObjectPtrT<LoggerFactory> LoggerFactoryPtr; | ||||
class LoggerRepository; | namespace helpers | |||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | { | |||
ryPtr; | class Properties; | |||
} | } | |||
namespace helpers | namespace spi { | |||
{ | class LoggerFactory; | |||
class Properties; | } | |||
} | ||||
/** | /** | |||
Allows the configuration of log4cxx from an external file. See | Allows the configuration of log4cxx from an external file. See | |||
<b>{@link #doConfigure(const String&, spi::LoggerRepositoryPtr&)}</b> | <b>{@link #doConfigure(const File&, log4cxx::spi::LoggerRepositoryPtr&)}</b > | |||
for the expected format. | for the expected format. | |||
<p>It is sometimes useful to see how log4cxx is reading configuration | <p>It is sometimes useful to see how log4cxx is reading configuration | |||
files. You can enable log4cxx internal logging by defining the | files. You can enable log4cxx internal logging by defining the | |||
<b>log4j.debug</b> variable. | <b>log4j.debug</b> variable. | |||
<P>At class initialization time class, | <P>At class initialization time class, | |||
the file <b>log4j.properties</b> will be searched in the current directory. | the file <b>log4j.properties</b> will be searched in the current directory. | |||
If the file can be found, then it will | If the file can be found, then it will | |||
be fed to the | be fed to the | |||
{@link PropertyConfigurator#configure(const String& configFilename)} | {@link PropertyConfigurator#configure(const File& configFilename)} | |||
method. | method. | |||
<p>The <code>PropertyConfigurator</code> does not handle the | <p>The <code>PropertyConfigurator</code> does not handle the | |||
advanced configuration features supported by the {@link | advanced configuration features supported by the {@link | |||
xml::DOMConfigurator DOMConfigurator} such as | xml::DOMConfigurator DOMConfigurator} such as | |||
support for {@link spi::Filter Filters}, custom | support for {@link spi::Filter Filters}, custom | |||
{@link spi::ErrorHandler ErrorHandlers}, nested | {@link spi::ErrorHandler ErrorHandlers}, nested | |||
appenders such as the {@link AsyncAppender | appenders such as the {@link AsyncAppender | |||
AsyncAppender}, etc. | AsyncAppender}, etc. | |||
skipping to change at line 87 | skipping to change at line 89 | |||
the substituted variable can be defined as a system property or in | the substituted variable can be defined as a system property or in | |||
the configuration file itself. The value of the key is first | the configuration file itself. The value of the key is first | |||
searched in the system properties, and if not found there, it is | searched in the system properties, and if not found there, it is | |||
then searched in the configuration file being parsed. The | then searched in the configuration file being parsed. The | |||
corresponding value replaces the ${variableName} sequence. For | corresponding value replaces the ${variableName} sequence. For | |||
example, if <code>java.home</code> system property is set to | example, if <code>java.home</code> system property is set to | |||
<code>/home/xyz</code>, then every occurrence of the sequence | <code>/home/xyz</code>, then every occurrence of the sequence | |||
<code>${java.home}</code> will be interpreted as | <code>${java.home}</code> will be interpreted as | |||
<code>/home/xyz</code>. | <code>/home/xyz</code>. | |||
*/ | */ | |||
class LOG4CXX_EXPORT PropertyConfigurator : | class LOG4CXX_EXPORT PropertyConfigurator : | |||
virtual public spi::Configurator, | virtual public spi::Configurator, | |||
virtual public helpers::ObjectImpl | virtual public helpers::ObjectImpl | |||
{ | { | |||
protected: | protected: | |||
static String CATEGORY_PREFIX; | ||||
static String LOGGER_PREFIX; | ||||
static String FACTORY_PREFIX; | ||||
static String ADDITIVITY_PREFIX; | ||||
static String ROOT_CATEGORY_PREFIX; | ||||
static String ROOT_LOGGER_PREFIX; | ||||
static String APPENDER_PREFIX; | ||||
static String RENDERER_PREFIX; | ||||
static String THRESHOLD_PREFIX; | ||||
/* Key for specifying the {@link spi::LoggerFactory | /** | |||
LoggerFactory}. Currently set to "<code>log4j.logge | Used internally to keep track of configured appenders. | |||
rFactory</code>". */ | */ | |||
static String LOGGER_FACTORY_KEY; | std::map<LogString, AppenderPtr>* registry; | |||
static String INTERNAL_ROOT_NAME; | ||||
/** | /** | |||
Used internally to keep track of configured appenders. | Used to create new instances of logger | |||
*/ | */ | |||
std::map<String, AppenderPtr> registry; | helpers::ObjectPtrT<spi::LoggerFactory> loggerFactory; | |||
spi::LoggerFactoryPtr loggerFactory; | ||||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(PropertyConfigurator) | DECLARE_LOG4CXX_OBJECT(PropertyConfigurator) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(spi::Configurator) | LOG4CXX_CAST_ENTRY(spi::Configurator) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
PropertyConfigurator(); | PropertyConfigurator(); | |||
virtual ~PropertyConfigurator(); | ||||
void addRef() const; | ||||
void releaseRef() const; | ||||
/** | /** | |||
Read configuration from a file. <b>The existing configuration is | Read configuration from a file. <b>The existing configuration is | |||
not cleared nor reset.</b> If you require a different behavior, | not cleared nor reset.</b> If you require a different behavior, | |||
then call {@link LogManager#resetConfiguration | then call {@link LogManager#resetConfiguration | |||
resetConfiguration} method before calling | resetConfiguration} method before calling | |||
<code>doConfigure</code>. | <code>doConfigure</code>. | |||
<p>The configuration file consists of statements in the format | <p>The configuration file consists of statements in the format | |||
<code>key=value</code>. The syntax of different configuration | <code>key=value</code>. The syntax of different configuration | |||
skipping to change at line 219 | skipping to change at line 214 | |||
<p>By default categories inherit their level from the | <p>By default categories inherit their level from the | |||
hierarchy. However, if you set the level of a logger and later | hierarchy. However, if you set the level of a logger and later | |||
decide that that logger should inherit its level, then you should | decide that that logger should inherit its level, then you should | |||
specify INHERITED as the value for the level value. NULL is a | specify INHERITED as the value for the level value. NULL is a | |||
synonym for INHERITED. | synonym for INHERITED. | |||
<p>Similar to the root logger syntax, each <i>appenderName</i> | <p>Similar to the root logger syntax, each <i>appenderName</i> | |||
(separated by commas) will be attached to the named logger. | (separated by commas) will be attached to the named logger. | |||
<p>See the <a href="../../../../manual.html#additivity">appender | <p>See the <a href="Introduction.html#additivity">appender | |||
additivity rule</a> in the user manual for the meaning of the | additivity rule</a> in the user manual for the meaning of the | |||
<code>additivity</code> flag. | <code>additivity</code> flag. | |||
<h3>Logger Factories</h3> | <h3>Logger Factories</h3> | |||
The usage of custom logger factories is discouraged and no longer | The usage of custom logger factories is discouraged and no longer | |||
documented. | documented. | |||
<h3>Example</h3> | <h3>Example</h3> | |||
skipping to change at line 295 | skipping to change at line 290 | |||
Layout for class specific options. | Layout for class specific options. | |||
<p>Use the <code>#</code> or <code>!</code> characters at the | <p>Use the <code>#</code> or <code>!</code> characters at the | |||
beginning of a line for comments. | beginning of a line for comments. | |||
<p> | <p> | |||
@param configFileName The name of the configuration file where the | @param configFileName The name of the configuration file where the | |||
configuration information is stored. | configuration information is stored. | |||
@param hierarchy The hierarchy to operation upon. | @param hierarchy The hierarchy to operation upon. | |||
*/ | */ | |||
void doConfigure(const String& configFileName, | void doConfigure(const File& configFileName, | |||
spi::LoggerRepositoryPtr& hierarchy); | spi::LoggerRepositoryPtr& hierarchy); | |||
/** | /** | |||
Read configuration options from file <code>configFilename</c | Read configuration options from file <code>configFilename</code>. | |||
ode>. | */ | |||
*/ | static void configure(const File& configFilename); | |||
static void configure(const String& configFilename); | ||||
/** | /** | |||
Like {@link #configureAndWatch(const String& configFilename, | Like {@link #configureAndWatch(const File& configFilename, long delay | |||
long delay)} | )} | |||
except that the | except that the | |||
default delay as defined by helpers::FileWatchdog#DEFAULT_DE | default delay as defined by helpers::FileWatchdog#DEFAULT_DELAY | |||
LAY | is used. | |||
is used. | @param configFilename A file in key=value format. | |||
@param configFilename A file in key=value format. | */ | |||
*/ | static void configureAndWatch(const File& configFilename); | |||
static void configureAndWatch(const String& configFilename); | ||||
/** | /** | |||
Read the configuration file <code>configFilename</code> if i | Read the configuration file <code>configFilename</code> if it | |||
t | exists. Moreover, a thread will be created that will periodically | |||
exists. Moreover, a thread will be created that will periodi | check if <code>configFilename</code> has been created or | |||
cally | modified. The period is determined by the <code>delay</code> | |||
check if <code>configFilename</code> has been created or | argument. If a change or file creation is detected, then | |||
modified. The period is determined by the <code>delay</code> | <code>configFilename</code> is read to configure log4j. | |||
argument. If a change or file creation is detected, then | ||||
<code>configFilename</code> is read to configure log4j. | ||||
@param configFilename A file in key=value format. | @param configFilename A file in key=value format. | |||
@param delay The delay in milliseconds to wait between each | @param delay The delay in milliseconds to wait between each check. | |||
check. | */ | |||
*/ | static void configureAndWatch(const File& configFilename, | |||
static void configureAndWatch(const String& configFilename, | long delay); | |||
long delay); | ||||
/** | /** | |||
Read configuration options from <code>properties</code>. | Read configuration options from <code>properties</code>. | |||
See #doConfigure(const string&, spi::LoggerRepositoryPtr&) | See #doConfigure(const File&, log4cxx::spi::LoggerRepositoryPtr&) | |||
for the expected format. | for the expected format. | |||
*/ | */ | |||
static void configure(helpers::Properties& properties); | static void configure(helpers::Properties& properties); | |||
/** | /** | |||
Read configuration options from <code>properties</code>. | Read configuration options from <code>properties</code>. | |||
See #doConfigure(const String&, spi::LoggerRepositoryPtr&) | See #doConfigure(const File&, log4cxx::spi::LoggerRepositoryPtr&) | |||
for the expected format. | for the expected format. | |||
*/ | */ | |||
void doConfigure(helpers::Properties& properties, | void doConfigure(helpers::Properties& properties, | |||
spi::LoggerRepositoryPtr& hierarchy); | spi::LoggerRepositoryPtr& hierarchy); | |||
// ------------------------------------------------------------------------ -- | // ------------------------------------------------------------------------ -- | |||
// Internal stuff | // Internal stuff | |||
// ------------------------------------------------------------------------ -- | // ------------------------------------------------------------------------ -- | |||
protected: | protected: | |||
/** | /** | |||
Check the provided <code>Properties</code> object for a | Check the provided <code>Properties</code> object for a | |||
#LoggerFactory | #loggerFactory | |||
entry specified by #LOGGER_FACTORY_KEY. If such an entry | entry specified by LOGGER_FACTORY_KEY. If such an entry | |||
exists, an attempt is made to create an instance using the d | exists, an attempt is made to create an instance using the default | |||
efault | constructor. This instance is used for subsequent Logger creations | |||
constructor. This instance is used for subsequent Logger cr | within this configurator. | |||
eations | @see #parseCatsAndRenderers | |||
within this configurator. | */ | |||
@see #parseCatsAndRenderers | void configureLoggerFactory(helpers::Properties& props); | |||
*/ | ||||
void configureLoggerFactory(helpers::Properties& props); | ||||
void configureRootCategory(helpers::Properties& props, | void configureRootLogger(helpers::Properties& props, | |||
spi::LoggerRepositoryPtr& hierarchy); | spi::LoggerRepositoryPtr& hierarchy); | |||
/** | /** | |||
Parse non-root elements, such non-root categories and render | Parse non-root elements, such non-root categories and renderers. | |||
ers. | */ | |||
*/ | void parseCatsAndRenderers(helpers::Properties& props, | |||
void parseCatsAndRenderers(helpers::Properties& props, | spi::LoggerRepositoryPtr& hierarchy); | |||
spi::LoggerRepositoryPtr& hierarchy); | ||||
/** | /** | |||
Parse the additivity option for a non-root logger. | Parse the additivity option for a non-root logger. | |||
*/ | */ | |||
void parseAdditivityForLogger(helpers::Properties& props, | void parseAdditivityForLogger(helpers::Properties& props, | |||
LoggerPtr& cat, const String& loggerName); | LoggerPtr& cat, const LogString& loggerName); | |||
/** | /** | |||
This method must work for the root logger as well. | This method must work for the root logger as well. | |||
*/ | */ | |||
void parseCategory( | void parseLogger( | |||
helpers::Properties& props, LoggerPtr& logger, | helpers::Properties& props, LoggerPtr& logger, | |||
const String& optionKey, const String& loggerName, | const LogString& optionKey, const LogString& loggerName, | |||
const String& value); | const LogString& value); | |||
AppenderPtr parseAppender( | AppenderPtr parseAppender( | |||
helpers::Properties& props, const String& appenderNa | helpers::Properties& props, const LogString& appenderName); | |||
me); | ||||
void registryPut(const AppenderPtr& appender); | void registryPut(const AppenderPtr& appender); | |||
AppenderPtr registryGet(const String& name); | AppenderPtr registryGet(const LogString& name); | |||
}; // class PropertyConfigurator | ||||
private: | ||||
PropertyConfigurator(const PropertyConfigurator&); | ||||
PropertyConfigurator& operator=(const PropertyConfigurator&); | ||||
}; // class PropertyConfigurator | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning (pop) | ||||
#endif | ||||
#endif //_LOG4CXX_PROPERTY_CONFIGURATOR_H | #endif //_LOG4CXX_PROPERTY_CONFIGURATOR_H | |||
End of changes. 31 change blocks. | ||||
140 lines changed or deleted | 132 lines changed or added | |||
propertyresourcebundle.h | propertyresourcebundle.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | #ifndef _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | |||
#define _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | #define _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | |||
#include <log4cxx/helpers/resourcebundle.h> | #include <log4cxx/helpers/resourcebundle.h> | |||
#include <log4cxx/helpers/properties.h> | #include <log4cxx/helpers/properties.h> | |||
#include <log4cxx/helpers/inputstream.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class PropertyResourceBundle; | ||||
typedef ObjectPtrT<PropertyResourceBundle> PropertyResourceB | ||||
undlePtr; | ||||
/** | /** | |||
PropertyResourceBundle is a concrete subclass of ResourceBun | PropertyResourceBundle is a concrete subclass of ResourceBu | |||
dle that | ndle that | |||
manages resources for a locale using a set of static strings | manages resources for a locale using a set of static string | |||
from a | s from a | |||
property file. | property file. | |||
*/ | */ | |||
class LOG4CXX_EXPORT PropertyResourceBundle : public Resourc | class LOG4CXX_EXPORT PropertyResourceBundle : public Resour | |||
eBundle | ceBundle | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(PropertyResourceBund | DECLARE_ABSTRACT_LOG4CXX_OBJECT(PropertyResourceBun | |||
le) | dle) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(PropertyResourceBundle) | LOG4CXX_CAST_ENTRY(PropertyResourceBundle) | |||
LOG4CXX_CAST_ENTRY_CHAIN(ResourceBundle) | LOG4CXX_CAST_ENTRY_CHAIN(ResourceBundle) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
Creates a property resource bundle. | Creates a property resource bundle. | |||
@param inStream property file to read from. | @param inStream property file to read from. | |||
@throw IOException if an error occurred when reading | @throw IOException if an error occurred when readin | |||
from the | g from the | |||
input stream. | input stream. | |||
*/ | */ | |||
PropertyResourceBundle(istream& inStream); | PropertyResourceBundle(InputStreamPtr inStream); | |||
virtual String getString(const String& key) const; | virtual LogString getString(const LogString& key) c onst; | |||
protected: | protected: | |||
Properties properties; | Properties properties; | |||
}; // class PropertyResourceBundle | }; // class PropertyResourceBundle | |||
} // namespace helpers | LOG4CXX_PTR_DEF(PropertyResourceBundle); | |||
}; // namespace log4cxx | } // namespace helpers | |||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | #endif // _LOG4CXX_HELPERS_PROPERTY_RESOURCE_BUNDLE_H | |||
End of changes. 7 change blocks. | ||||
41 lines changed or deleted | 41 lines changed or added | |||
propertysetter.h | propertysetter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_CONFIG_PROPERTYSETTER_H | #ifndef _LOG4CXX_CONFIG_PROPERTYSETTER_H | |||
#define _LOG4CXX_CONFIG_PROPERTYSETTER_H | #define _LOG4CXX_CONFIG_PROPERTYSETTER_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class Object; | class Object; | |||
typedef ObjectPtrT<Object> ObjectPtr; | typedef ObjectPtrT<Object> ObjectPtr; | |||
class Properties; | class Properties; | |||
} | class Pool; | |||
} | ||||
namespace config | namespace config | |||
{ | { | |||
/** | /** | |||
General purpose Object property setter. Clients repeatedly invokes | General purpose Object property setter. Clients repeatedly | |||
{@link #setProperty setProperty(name,value)} in order to invoke setters | invokes | |||
on the Object specified in the constructor. | {@link #setProperty setProperty(name,value)} in order to in | |||
voke setters | ||||
on the Object specified in the constructor. | ||||
<p>Usage: | <p>Usage: | |||
<pre> | <pre> | |||
PropertySetter ps(anObject); | PropertySetter ps(anObject); | |||
ps.set("name", "Joe"); | ps.set("name", "Joe"); | |||
ps.set("age", "32"); | ps.set("age", "32"); | |||
ps.set("isMale", "true"); | ps.set("isMale", "true"); | |||
</pre> | </pre> | |||
will cause the invocations anObject->setOption("name", "Joe"), | will cause the invocations anObject->setOption("name", "Joe | |||
anObject->setOption("age", "32") and anObject->setOption("isMale", "true") | "), | |||
if the spi::OptionHandler interface is supported by anObject. | anObject->setOption("age", "32") and anObject->setOption("i | |||
*/ | sMale", "true") | |||
class LOG4CXX_EXPORT PropertySetter | if the spi::OptionHandler interface is supported by anObjec | |||
{ | t. | |||
protected: | */ | |||
helpers::ObjectPtr obj; | class LOG4CXX_EXPORT PropertySetter | |||
{ | ||||
protected: | ||||
helpers::ObjectPtr obj; | ||||
public: | public: | |||
/** | /** | |||
Create a new PropertySetter for the specified Object. This is done | Create a new PropertySetter for the specified Objec | |||
in prepartion for invoking #setProperty one or more times. | t. This is done | |||
in prepartion for invoking #setProperty one or more | ||||
times. | ||||
@param obj the object for which to set properties | @param obj the object for which to set properties | |||
*/ | */ | |||
PropertySetter(helpers::ObjectPtr obj); | PropertySetter(const helpers::ObjectPtr& obj); | |||
/** | /** | |||
Set the properties of an object passed as a parameter in one | Set the properties of an object passed as a paramet | |||
go. The <code>properties</code> are parsed relative to a | er in one | |||
<code>prefix</code>. | go. The <code>properties</code> are parsed relative | |||
to a | ||||
<code>prefix</code>. | ||||
@param obj The object to configure. | @param obj The object to configure. | |||
@param properties A java.util.Properties containing keys and values. | @param properties A java.util.Properties containing | |||
@param prefix Only keys having the specified prefix will be set. | keys and values. | |||
*/ | @param prefix Only keys having the specified prefix | |||
static void setProperties(helpers::ObjectPtr obj, | will be set. | |||
helpers::Properties& properties, const Strin | @param p pool to use for any allocations required d | |||
g& prefix); | uring call. | |||
*/ | ||||
static void setProperties(const helpers::ObjectPtr& | ||||
obj, | ||||
helpers::Properties& properties, | ||||
const LogString& prefix, | ||||
log4cxx::helpers::Pool& p); | ||||
/** | /** | |||
Set the properites for the object that match the | Set the properites for the object that match the | |||
<code>prefix</code> passed as parameter. | <code>prefix</code> passed as parameter. | |||
*/ | */ | |||
void setProperties(helpers::Properties& properties, | void setProperties(helpers::Properties& properties, | |||
const String& prefix); | const LogString& prefix, | |||
log4cxx::helpers::Pool& p); | ||||
/** | /** | |||
Set a property on this PropertySetter's Object. If the underlying | Set a property on this PropertySetter's Object. If | |||
Object supports the spi::OptionHandler interface, the | the underlying | |||
{@link spi::OptionHandler#setOption setOption} method is called. | Object supports the spi::OptionHandler interface, t | |||
he | ||||
{@link spi::OptionHandler#setOption setOption} meth | ||||
od is called. | ||||
@param name name of the property | @param option name of the property | |||
@param value String value of the property | @param value String value of the property | |||
*/ | @param p pool to use for any allocations required d | |||
void setProperty(const String& name, const String& v | uring call. | |||
alue); | */ | |||
void setProperty(const LogString& option, | ||||
const LogString& value, | ||||
log4cxx::helpers::Pool& p); | ||||
void activate(); | void activate(log4cxx::helpers::Pool& p); | |||
}; // class PropertySetter | }; // class PropertySetter | |||
} // namespace config; | } // namespace config; | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_CONFIG_PROPERTYSETTER_H | #endif //_LOG4CXX_CONFIG_PROPERTYSETTER_H | |||
End of changes. 14 change blocks. | ||||
70 lines changed or deleted | 94 lines changed or added | |||
provisionnode.h | provisionnode.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
skipping to change at line 29 | skipping to change at line 30 | |||
#include <vector> | #include <vector> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/logger.h> | #include <log4cxx/logger.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class Logger; | class Logger; | |||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | typedef helpers::ObjectPtrT<Logger> LoggerPtr; | |||
class ProvisionNode : public std::vector<LoggerPtr> | typedef std::vector<LoggerPtr> ProvisionNode; | |||
{ | ||||
public: | ||||
ProvisionNode(const LoggerPtr& logger) | ||||
{ | ||||
push_back(logger); | ||||
} | ||||
}; // class LogManager | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#endif //_LOG4CXX_PROVISION_NODE_H | #endif //_LOG4CXX_PROVISION_NODE_H | |||
End of changes. 2 change blocks. | ||||
13 lines changed or deleted | 8 lines changed or added | |||
relativetimedateformat.h | relativetimedateformat.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | #ifndef _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | |||
#define _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | #define _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | |||
#include <log4cxx/helpers/dateformat.h> | #include <log4cxx/helpers/dateformat.h> | |||
#include <log4cxx/helpers/system.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Formats a date by printing the number of seconds | Formats a date by printing the number of seconds | |||
elapsed since the start of the application. This is the fast | elapsed since the start of the application. This is the fas | |||
est | test | |||
printing DateFormat in the package. | printing DateFormat in the package. | |||
*/ | */ | |||
class LOG4CXX_EXPORT RelativeTimeDateFormat : public DateFor | class LOG4CXX_EXPORT RelativeTimeDateFormat : public DateFo | |||
mat | rmat | |||
{ | { | |||
protected: | public: | |||
int64_t startTime; | RelativeTimeDateFormat(); | |||
virtual void format(LogString &s, | ||||
log4cxx_time_t tm, | ||||
log4cxx::helpers::Pool& p) const; | ||||
public: | private: | |||
RelativeTimeDateFormat() | log4cxx_time_t startTime; | |||
: DateFormat(_T(""), 0), startTime(System::currentT | ||||
imeMillis()) | ||||
{ | ||||
} | ||||
virtual void format(ostream& os, int64_t time) const | }; | |||
{ | } // namespace helpers | |||
os << (time - startTime); | } // namespace log4cxx | |||
} | ||||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | #endif // _LOG4CXX_HELPERS_RELATIVE_TIME_DATE_FORMAT_H | |||
End of changes. 5 change blocks. | ||||
32 lines changed or deleted | 27 lines changed or added | |||
repositoryselector.h | repositoryselector.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_REPOSITORY_SELECTOR_H | #ifndef _LOG4CXX_SPI_REPOSITORY_SELECTOR_H | |||
#define _LOG4CXX_SPI_REPOSITORY_SELECTOR_H | #define _LOG4CXX_SPI_REPOSITORY_SELECTOR_H | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class LoggerRepository; | class LoggerRepository; | |||
typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposito | typedef helpers::ObjectPtrT<LoggerRepository> LoggerReposit | |||
ryPtr; | oryPtr; | |||
class RepositorySelector; | ||||
typedef helpers::ObjectPtrT<RepositorySelector> RepositorySe | ||||
lectorPtr; | ||||
/** | /** | |||
The <code>LogManager</code> uses one (and only one) | The <code>LogManager</code> uses one (and only one) | |||
<code>RepositorySelector</code> implementation to select the | <code>RepositorySelector</code> implementation to select the | |||
{@link LoggerRepository LoggerRepository} | {@link log4cxx::spi::LoggerRepository LoggerRepository} | |||
for a particular application context. | for a particular application context. | |||
<p>It is the responsability of the <code>RepositorySelector</code> | <p>It is the responsability of the <code>RepositorySelector</code> | |||
implementation to track the application context. log4cxx makes no | implementation to track the application context. log4cxx makes no | |||
assumptions about the application context or on its management. | assumptions about the application context or on its management. | |||
<p>See also LogManager. | <p>See also LogManager. | |||
*/ | */ | |||
class LOG4CXX_EXPORT RepositorySelector : public virtual hel | class LOG4CXX_EXPORT RepositorySelector : public virtual he | |||
pers::Object | lpers::Object | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(RepositorySelector) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(RepositorySelector) | |||
virtual ~RepositorySelector() {} | virtual ~RepositorySelector() {} | |||
virtual LoggerRepositoryPtr& getLoggerRepository() = | virtual LoggerRepositoryPtr& getLoggerRepository() | |||
0; | = 0; | |||
}; | }; | |||
} //namespace spi | LOG4CXX_PTR_DEF(RepositorySelector); | |||
}; //namespace log4cxx | } //namespace spi | |||
} //namespace log4cxx | ||||
#endif //_LOG4CXX_SPI_REPOSITORY_SELECTOR_H | #endif //_LOG4CXX_SPI_REPOSITORY_SELECTOR_H | |||
End of changes. 4 change blocks. | ||||
27 lines changed or deleted | 25 lines changed or added | |||
resourcebundle.h | resourcebundle.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_RESOURCE_BUNDLE_H | #ifndef _LOG4CXX_HELPERS_RESOURCE_BUNDLE_H | |||
#define _LOG4CXX_HELPERS_RESOURCE_BUNDLE_H | #define _LOG4CXX_HELPERS_RESOURCE_BUNDLE_H | |||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/exception.h> | ||||
#include <log4cxx/helpers/locale.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT MissingResourceException : public Excep | class Locale; | |||
tion | ||||
{ | ||||
}; | ||||
class ResourceBundle; | class ResourceBundle; | |||
typedef ObjectPtrT<ResourceBundle> ResourceBundlePtr; | LOG4CXX_PTR_DEF(ResourceBundle); | |||
/** | /** | |||
Resource bundles contain locale-specific objects | Resource bundles contain locale-specific objects | |||
*/ | */ | |||
class LOG4CXX_EXPORT ResourceBundle : public ObjectImpl | class LOG4CXX_EXPORT ResourceBundle : public ObjectImpl | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(ResourceBundle) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(ResourceBundle) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(ResourceBundle) | LOG4CXX_CAST_ENTRY(ResourceBundle) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
Gets a string for the given key from this resource b | Gets a string for the given key from this resource | |||
undle or one of | bundle or one of | |||
its parents. Calling this method is equivalent to ca | its parents. Calling this method is equivalent to c | |||
lling | alling | |||
@param key the key for the desired string | @param key the key for the desired string | |||
@return the string for the given key | @return the string for the given key | |||
@throw MissingResourceException - if no object for t | @throw MissingResourceException - if no object for | |||
he given key | the given key | |||
can be found | can be found | |||
*/ | */ | |||
virtual String getString(const String& key) const = | virtual LogString getString(const LogString& key) c | |||
0; | onst = 0; | |||
/** | /** | |||
Gets a resource bundle using the specified base name | Gets a resource bundle using the specified base nam | |||
and locale | e and locale | |||
@param baseName the base name of the resource bundle | @param baseName the base name of the resource bundl | |||
, a fully | e, a fully | |||
qualified class name or property filename | qualified class name or property filename | |||
@param locale the locale for which a resource bundle | @param locale the locale for which a resource bundl | |||
is desired | e is desired | |||
*/ | */ | |||
static ResourceBundlePtr getBundle(const String& bas | static ResourceBundlePtr getBundle(const LogString& | |||
eName, | baseName, | |||
const Locale& locale); | const Locale& locale); | |||
protected: | protected: | |||
/* | /* | |||
Sets the parent bundle of this bundle. The parent bu | Sets the parent bundle of this bundle. The parent b | |||
ndle is | undle is | |||
searched by #getString when this bundle does not con | searched by #getString when this bundle does not co | |||
tain a particular | ntain a particular | |||
resource. | resource. | |||
Parameters: | Parameters: | |||
parent - this bundle's parent bundle. | parent - this bundle's parent bundle. | |||
*/ | */ | |||
inline void setParent(const ResourceBundlePtr& paren | inline void setParent(const ResourceBundlePtr& pare | |||
t) | nt1) | |||
{ this->parent = parent; } | { this->parent = parent1; } | |||
/** | /** | |||
The parent bundle of this bundle. | The parent bundle of this bundle. | |||
The parent bundle is searched by #getString when thi | The parent bundle is searched by #getString when th | |||
s bundle does | is bundle does | |||
not contain a particular resource. | not contain a particular resource. | |||
*/ | */ | |||
ResourceBundlePtr parent; | ResourceBundlePtr parent; | |||
}; // class ResourceBundle | }; // class ResourceBundle | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif | #endif | |||
End of changes. 13 change blocks. | ||||
73 lines changed or deleted | 69 lines changed or added | |||
rollingfileappender.h | rollingfileappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_ROLLING_FILE_APPENDER_H | #if !defined(_LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_H) | |||
#define _LOG4CXX_ROLLING_FILE_APPENDER_H | #define _LOG4CXX_ROLLING_ROLLING_FILE_APPENDER_H | |||
#include <log4cxx/fileappender.h> | ||||
#include <log4cxx/helpers/optionconverter.h> | ||||
namespace log4cxx | #include <log4cxx/rolling/rollingfileappenderskeleton.h> | |||
{ | ||||
/** | ||||
RollingFileAppender extends FileAppender to backup the log files whe | ||||
n | ||||
they reach a certain size. | ||||
*/ | ||||
class LOG4CXX_EXPORT RollingFileAppender : public FileAppender | ||||
{ | ||||
protected: | ||||
/** | ||||
The default maximum file size is 10MB. | ||||
*/ | ||||
long maxFileSize; | ||||
/** | namespace log4cxx { | |||
There is one backup file by default. | namespace rolling { | |||
*/ | ||||
int maxBackupIndex; | ||||
public: | /** | |||
DECLARE_LOG4CXX_OBJECT(RollingFileAppender) | * <code>RollingFileAppender</code> extends {@link log4cxx::FileApp | |||
BEGIN_LOG4CXX_CAST_MAP() | ender} to backup the log files | |||
LOG4CXX_CAST_ENTRY(RollingFileAppender) | * depending on {@link log4cxx::rolling::RollingPolicy RollingPolic | |||
LOG4CXX_CAST_ENTRY_CHAIN(FileAppender) | y} and {@link log4cxx::rolling::TriggeringPolicy TriggeringPolicy}. | |||
END_LOG4CXX_CAST_MAP() | * <p> | |||
/** | * To be of any use, a <code>RollingFileAppender</code> instance mu | |||
The default constructor simply calls its {@link | st have both | |||
FileAppender#FileAppender parents constructor}. */ | * a <code>RollingPolicy</code> and a <code>TriggeringPolicy</code> | |||
RollingFileAppender(); | set up. | |||
* However, if its <code>RollingPolicy</code> also implements the | ||||
* <code>TriggeringPolicy</code> interface, then only the former ne | ||||
eds to be | ||||
* set up. For example, {@link log4cxx::rolling::TimeBasedRollingPo | ||||
licy TimeBasedRollingPolicy} acts both as a | ||||
* <code>RollingPolicy</code> and a <code>TriggeringPolicy</code>. | ||||
* | ||||
* <p><code>RollingFileAppender</code> can be configured programatt | ||||
ically or | ||||
* using {@link log4cxx::xml::DOMConfigurator}. Here is a sample | ||||
* configration file: | ||||
/** | <pre><?xml version="1.0" encoding="UTF-8" ?> | |||
Instantiate a RollingFileAppender and open the file designat | <!DOCTYPE log4j:configuration> | |||
ed by | ||||
<code>filename</code>. The opened filename will become the o | ||||
uput | ||||
destination for this appender. | ||||
<p>If the <code>append</code> parameter is true, the file wi | <log4j:configuration debug="true"> | |||
ll be | ||||
appended to. Otherwise, the file desginated by | ||||
<code>filename</code> will be truncated before being opened. | ||||
*/ | ||||
RollingFileAppender(const LayoutPtr& layout, const String& f | ||||
ileName, bool append); | ||||
/** | <appender name="ROLL" class="org.apache.log4j.rolling.RollingF | |||
Instantiate a FileAppender and open the file designated by | ileAppender"> | |||
<code>filename</code>. The opened filename will become the o | <b><rollingPolicy class="org.apache.log4j.rolling.TimeBasedR | |||
utput | ollingPolicy"> | |||
destination for this appender. | <param name="FileNamePattern" value="/wombat/foo.%d{yyyy-M | |||
<p>The file will be appended to. */ | M}.gz"/> | |||
RollingFileAppender(const LayoutPtr& layout, const String& f | </rollingPolicy></b> | |||
ileName); | ||||
~RollingFileAppender(); | <layout class="org.apache.log4j.PatternLayout"> | |||
<param name="ConversionPattern" value="%c{1} - %m%n"/> | ||||
</layout> | ||||
</appender> | ||||
/** | <root"> | |||
Returns the value of the <b>MaxBackupIndex</b> option. | <appender-ref ref="ROLL"/> | |||
*/ | </root> | |||
inline int getMaxBackupIndex() const | ||||
{ return maxBackupIndex; } | ||||
/** | </log4j:configuration> | |||
Get the maximum size that the output file is allowed to reac | </pre> | |||
h | ||||
before being rolled over to backup files. | ||||
*/ | ||||
inline long getMaximumFileSize() const | ||||
{ return maxFileSize; } | ||||
/** | *<p>This configuration file specifies a monthly rollover schedule | |||
Implements the usual roll over behaviour. | including | |||
* automatic compression of the archived files. See | ||||
* {@link TimeBasedRollingPolicy} for more details. | ||||
* | ||||
* | ||||
* | ||||
* | ||||
* */ | ||||
class LOG4CXX_EXPORT RollingFileAppender : public RollingFileAppend | ||||
erSkeleton { | ||||
DECLARE_LOG4CXX_OBJECT(RollingFileAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(RollingFileAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(RollingFileAppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
<p>If <code>MaxBackupIndex</code> is positive, then files | public: | |||
{<code>File.1</code>, ..., <code>File.MaxBackupIndex -1</cod | RollingFileAppender(); | |||
e>} | ||||
are renamed to {<code>File.2</code>, ..., | ||||
<code>File.MaxBackupIndex</code>}. Moreover, <code>File</cod | ||||
e> is | ||||
renamed <code>File.1</code> and closed. A new <code>File</co | ||||
de> is | ||||
created to receive further log output. | ||||
<p>If <code>MaxBackupIndex</code> is equal to zero, then the | using RollingFileAppenderSkeleton::getRollingPolicy; | |||
<code>File</code> is truncated with no backup files created. | ||||
*/ | ||||
// synchronization not necessary since doAppend is alreasy s | ||||
ynched | ||||
void rollOver(); | ||||
/** | using RollingFileAppenderSkeleton::getTriggeringPolicy; | |||
Set the maximum number of backup files to keep around. | ||||
<p>The <b>MaxBackupIndex</b> option determines how many back | /** | |||
up | * Sets the rolling policy. In case the 'policy' argument also im | |||
files are kept before the oldest is erased. This option take | plements | |||
s | * {@link TriggeringPolicy}, then the triggering policy for this | |||
a positive integer value. If set to zero, then there will be | appender | |||
no | * is automatically set to be the policy argument. | |||
backup files and the log file will be truncated when it reac | * @param policy | |||
hes | */ | |||
<code>MaxFileSize</code>. | using RollingFileAppenderSkeleton::setRollingPolicy; | |||
*/ | ||||
inline void setMaxBackupIndex(int maxBackupIndex) | ||||
{ this->maxBackupIndex = maxBackupIndex; } | ||||
/** | using RollingFileAppenderSkeleton::setTriggeringPolicy; | |||
Set the maximum size that the output file is allowed to reac | ||||
h | ||||
before being rolled over to backup files. | ||||
<p>In configuration files, the <b>MaxFileSize</b> option tak | }; | |||
es an | ||||
long integer in the range 0 - 2^63. You can specify the valu | ||||
e | ||||
with the suffixes "KB", "MB" or "GB" so that the integer is | ||||
interpreted being expressed respectively in kilobytes, megab | ||||
ytes | ||||
or gigabytes. For example, the value "10KB" will be interpre | ||||
ted | ||||
as 10240. | ||||
*/ | ||||
inline void setMaxFileSize(const String& value) | ||||
{ maxFileSize = helpers::OptionConverter::toFileSize | ||||
( | ||||
value, maxFileSize + 1); } | ||||
virtual void setOption(const String& option, const String& v alue); | LOG4CXX_PTR_DEF(RollingFileAppender); | |||
protected: | } | |||
/** | } | |||
This method differentiates RollingFileAppender from its pare | ||||
nt | ||||
class. | ||||
*/ | ||||
virtual void subAppend(const spi::LoggingEventPtr& event); | ||||
}; // class RollingFileAppender | ||||
} // namespace log4cxx | ||||
#endif //_LOG4CXX_ROLLING_FILE_APPENDER_H | #endif | |||
End of changes. 21 change blocks. | ||||
132 lines changed or deleted | 85 lines changed or added | |||
serversocket.h | serversocket.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_SERVER_SOCKET_H | #ifndef _LOG4CXX_HELPERS_SERVER_SOCKET_H | |||
#define _LOG4CXX_HELPERS_SERVER_SOCKET_H | #define _LOG4CXX_HELPERS_SERVER_SOCKET_H | |||
#include <log4cxx/helpers/socket.h> | #include <log4cxx/helpers/socket.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/mutex.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT ServerSocket | class LOG4CXX_EXPORT ServerSocket | |||
{ | { | |||
public: | public: | |||
/** Creates a server socket on a specified port. | /** Creates a server socket on a specified port. | |||
*/ | */ | |||
ServerSocket(int port); | ServerSocket(int port); | |||
/** Creates a server socket and binds it to the spec | ||||
ified local | ||||
port number, with the specified backlog. | ||||
*/ | ||||
ServerSocket(int port, int backlog); | ||||
/** Create a server with the specified port, listen | ||||
backlog, | ||||
and local IP address to bind to. | ||||
*/ | ||||
ServerSocket(int port, int backlog, InetAddress bind | ||||
Addr); | ||||
~ServerSocket(); | ||||
/** Listens for a connection to be made to this sock | ||||
et and | ||||
accepts it | ||||
*/ | ||||
SocketPtr accept(); | ||||
/** Closes this socket. | virtual ~ServerSocket(); | |||
*/ | ||||
inline void close() | ||||
{ socketImpl->close(); } | ||||
/** Returns the local address of this server socket. | /** Listens for a connection to be made to this soc | |||
*/ | ket and | |||
inline InetAddress getInetAddress() const | accepts it | |||
{ return socketImpl->getInetAddress(); } | */ | |||
SocketPtr accept(); | ||||
/** Returns the port on which this socket is listeni | /** Closes this socket. | |||
ng. | */ | |||
*/ | void close(); | |||
inline int getLocalPort() const | ||||
{ return socketImpl->getLocalPort(); } | ||||
/** Returns the implementation address and implement | /** Retrive setting for SO_TIMEOUT. | |||
ation | */ | |||
port of this socket as a String | int getSoTimeout() const; | |||
*/ | ||||
inline String toString() const | ||||
{ return socketImpl->toString(); } | ||||
/** Retrive setting for SO_TIMEOUT. | /** Enable/disable SO_TIMEOUT with the specified ti | |||
*/ | meout, in milliseconds. | |||
int getSoTimeout() const; | */ | |||
void setSoTimeout(int timeout); | ||||
/** Enable/disable SO_TIMEOUT with the specified tim | private: | |||
eout, in milliseconds. | Pool pool; | |||
*/ | Mutex mutex; | |||
void setSoTimeout(int timeout); | apr_socket_t* socket; | |||
int timeout; | ||||
protected: | }; | |||
SocketImplPtr socketImpl; | } // namespace helpers | |||
}; | } // namespace log4cxx | |||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_SERVER_SOCKET_H | #endif //_LOG4CXX_HELPERS_SERVER_SOCKET_H | |||
End of changes. 10 change blocks. | ||||
67 lines changed or deleted | 39 lines changed or added | |||
simplelayout.h | simplelayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SIMPLE_LAYOUT_H | #ifndef _LOG4CXX_SIMPLE_LAYOUT_H | |||
#define _LOG4CXX_SIMPLE_LAYOUT_H | #define _LOG4CXX_SIMPLE_LAYOUT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class SimpleLayout; | /** | |||
typedef helpers::ObjectPtrT<SimpleLayout> SimpleLayoutPtr; | SimpleLayout consists of the level of the log statement, | |||
followed by " - " and then the log message itself. For example, | ||||
/** | ||||
SimpleLayout consists of the level of the log statement, | ||||
followed by " - " and then the log message itself. For example, | ||||
<pre> | <pre> | |||
DEBUG - Hello world | DEBUG - Hello world | |||
</pre> | </pre> | |||
<p> | <p> | |||
<p>PatternLayout offers a much more powerful alternative. | <p>PatternLayout offers a much more powerful alternative. | |||
*/ | */ | |||
class LOG4CXX_EXPORT SimpleLayout : public Layout | class LOG4CXX_EXPORT SimpleLayout : public Layout | |||
{ | { | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(SimpleLayout) | DECLARE_LOG4CXX_OBJECT(SimpleLayout) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(SimpleLayout) | LOG4CXX_CAST_ENTRY(SimpleLayout) | |||
LOG4CXX_CAST_ENTRY_CHAIN(Layout) | LOG4CXX_CAST_ENTRY_CHAIN(Layout) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
Returns the log statement in a format consisting of the | Returns the log statement in a format consisting of the | |||
<code>level</code>, followed by " - " and then the | <code>level</code>, followed by " - " and then the | |||
<code>message</code>. For example, <pre> INFO - "A message" | <code>message</code>. For example, <pre> INFO - "A message" | |||
</pre> | </pre> | |||
<p>The <code>category</code> parameter is ignored. | @return A byte array in SimpleLayout format. | |||
<p> | */ | |||
@return A byte array in SimpleLayout format. | virtual void format(LogString& output, | |||
*/ | const spi::LoggingEventPtr& event, | |||
virtual void format(ostream& output, const spi::LoggingEvent | log4cxx::helpers::Pool& pool) const; | |||
Ptr& event) const; | ||||
/** | /** | |||
The SimpleLayout does not handle the throwable contained wit | The SimpleLayout does not handle the throwable contained wi | |||
hin | thin | |||
{@link spi::LoggingEvent LoggingEvents}. Thus, it returns | {@link spi::LoggingEvent LoggingEvents}. Thus, it returns | |||
<code>true</code>. | <code>true</code>. | |||
*/ | */ | |||
bool ignoresThrowable() const { return true; } | bool ignoresThrowable() const { return true; } | |||
virtual void activateOptions() {} | virtual void activateOptions(log4cxx::helpers::Pool& /* p * | |||
virtual void setOption(const String& option, const String& v | /) {} | |||
alue) {} | virtual void setOption(const LogString& /* option */, | |||
}; | const LogString& /* value */) {} | |||
}; | ||||
LOG4CXX_PTR_DEF(SimpleLayout); | ||||
} // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_SIMPLE_LAYOUT_H | #endif //_LOG4CXX_SIMPLE_LAYOUT_H | |||
End of changes. 11 change blocks. | ||||
47 lines changed or deleted | 55 lines changed or added | |||
smtpappender.h | smtpappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_SMTP_H | #ifndef _LOG4CXX_NET_SMTP_H | |||
#define _LOG4CXX_NET_SMTP_H | #define _LOG4CXX_NET_SMTP_H | |||
#include <log4cxx/config.h> | ||||
#ifdef HAVE_SMTP | ||||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/cyclicbuffer.h> | #include <log4cxx/helpers/cyclicbuffer.h> | |||
#include <log4cxx/spi/triggeringeventevaluator.h> | #include <log4cxx/spi/triggeringeventevaluator.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace net | namespace net | |||
{ | { | |||
class SMTPAppender; | /** | |||
typedef helpers::ObjectPtrT<SMTPAppender> SMTPAppenderPtr; | Send an e-mail when a specific logging event occurs, typica | |||
lly on | ||||
errors or fatal errors. | ||||
<p>The number of logging events delivered in this e-mail de | ||||
pend on | ||||
the value of <b>BufferSize</b> option. The | ||||
<code>SMTPAppender</code> keeps only the last | ||||
<code>BufferSize</code> logging events in its cyclic buffer | ||||
. This | ||||
keeps memory requirements at a reasonable level while still | ||||
delivering useful application context. | ||||
*/ | ||||
class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton | ||||
{ | ||||
private: | ||||
/** | private: | |||
Send an e-mail when a specific logging event occurs, typical | SMTPAppender(const SMTPAppender&); | |||
ly on | SMTPAppender& operator=(const SMTPAppender&); | |||
errors or fatal errors. | static bool asciiCheck(const LogString& value, cons | |||
<p>The number of logging events delivered in this e-mail dep | t LogString& label); | |||
end on | /** | |||
the value of <b>BufferSize</b> option. The | This method determines if there is a sense in attem | |||
<code>SMTPAppender</code> keeps only the last | pting to append. | |||
<code>BufferSize</code> logging events in its cyclic buffer. | <p>It checks whether there is a set output target a | |||
This | nd also if | |||
keeps memory requirements at a reasonable level while still | there is a set layout. If these checks fail, then t | |||
delivering useful application context. | he boolean | |||
*/ | value <code>false</code> is returned. */ | |||
class LOG4CXX_EXPORT SMTPAppender : public AppenderSkeleton | bool checkEntryConditions(); | |||
{ | ||||
private: | ||||
String to; | ||||
String from; | ||||
String subject; | ||||
String smtpHost; | ||||
int bufferSize; // 512 | ||||
bool locationInfo; | ||||
helpers::CyclicBuffer cb; | ||||
void * session; | ||||
String encoding; | ||||
String charset; | ||||
protected: | LogString to; | |||
spi::TriggeringEventEvaluatorPtr evaluator; | LogString cc; | |||
LogString bcc; | ||||
LogString from; | ||||
LogString subject; | ||||
LogString smtpHost; | ||||
LogString smtpUsername; | ||||
LogString smtpPassword; | ||||
int smtpPort; | ||||
int bufferSize; // 512 | ||||
bool locationInfo; | ||||
helpers::CyclicBuffer cb; | ||||
spi::TriggeringEventEvaluatorPtr evaluator; | ||||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(SMTPAppender) | DECLARE_LOG4CXX_OBJECT(SMTPAppender) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(SMTPAppender) | LOG4CXX_CAST_ENTRY(SMTPAppender) | |||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | SMTPAppender(); | |||
The default constructor will instantiate the appende | /** | |||
r with a | The default constructor will instantiate the append | |||
spi::TriggeringEventEvaluator that will trigger on e | er with a | |||
vents with | spi::TriggeringEventEvaluator that will trigger on | |||
level ERROR or higher.*/ | events with | |||
SMTPAppender(); | level ERROR or higher.*/ | |||
SMTPAppender(log4cxx::helpers::Pool& p); | ||||
/** | /** | |||
Use <code>evaluator</code> passed as parameter as th | Use <code>evaluator</code> passed as parameter as t | |||
e | he | |||
spi::TriggeringEventEvaluator for this net::SMTPAppe | spi::TriggeringEventEvaluator for this net::SMTPApp | |||
nder. | ender. | |||
*/ | */ | |||
SMTPAppender(spi::TriggeringEventEvaluatorPtr evalua | SMTPAppender(spi::TriggeringEventEvaluatorPtr evalu | |||
tor); | ator); | |||
~SMTPAppender(); | ~SMTPAppender(); | |||
/** | /** | |||
Set options | Set options | |||
*/ | */ | |||
virtual void setOption(const String& option, const S | virtual void setOption(const LogString& option, con | |||
tring& value); | st LogString& value); | |||
/** | /** | |||
Activate the specified options, such as the smtp hos | Activate the specified options, such as the smtp ho | |||
t, the | st, the | |||
recipient, from, etc. | recipient, from, etc. | |||
*/ | */ | |||
virtual void activateOptions(); | virtual void activateOptions(log4cxx::helpers::Pool | |||
& p); | ||||
/** | /** | |||
Perform SMTPAppender specific appending actions, mai | Perform SMTPAppender specific appending actions, ma | |||
nly adding | inly adding | |||
the event to a cyclic buffer and checking if the eve | the event to a cyclic buffer and checking if the ev | |||
nt triggers | ent triggers | |||
an e-mail to be sent. */ | an e-mail to be sent. */ | |||
virtual void append(const spi::LoggingEventPtr& even | virtual void append(const spi::LoggingEventPtr& eve | |||
t); | nt, log4cxx::helpers::Pool& p); | |||
/** | virtual void close(); | |||
This method determines if there is a sense in attemp | ||||
ting to append. | ||||
<p>It checks whether there is a set output target an | ||||
d also if | ||||
there is a set layout. If these checks fail, then th | ||||
e boolean | ||||
value <code>false</code> is returned. */ | ||||
bool checkEntryConditions(); | ||||
virtual void close(); | /** | |||
Returns value of the <b>To</b> option. | ||||
*/ | ||||
LogString getTo() const; | ||||
std::vector<String> parseAddress(const String& addre | /** | |||
ssStr); | Returns value of the <b>cc</b> option. | |||
*/ | ||||
LogString getCc() const; | ||||
/** | /** | |||
Returns value of the <b>To</b> option. | Returns value of the <b>bcc</b> option. | |||
*/ | */ | |||
inline const String& getTo() const | LogString getBcc() const; | |||
{ return to; } | ||||
/** | /** | |||
The <code>SMTPAppender</code> requires a {@link | The <code>SMTPAppender</code> requires a {@link | |||
Layout layout}. */ | Layout layout}. */ | |||
virtual bool requiresLayout() const | virtual bool requiresLayout() const; | |||
{ return true; } | ||||
/** | /** | |||
Send the contents of the cyclic buffer as an e-mail | Send the contents of the cyclic buffer as an e-mail | |||
message. | message. | |||
*/ | */ | |||
void sendBuffer(); | void sendBuffer(log4cxx::helpers::Pool& p); | |||
/** | /** | |||
Returns value of the <b>Charset</b> option. | Returns value of the <b>EvaluatorClass</b> option. | |||
*/ | */ | |||
inline const String& getCharset() const | LogString getEvaluatorClass(); | |||
{ return charset; } | ||||
/** | /** | |||
Returns value of the <b>Encoding</b> option. | Returns value of the <b>From</b> option. | |||
*/ | */ | |||
inline const String& getEncoding() const | LogString getFrom() const; | |||
{ return encoding; } | ||||
/** | /** | |||
Returns value of the <b>EvaluatorClass</b> option. | Returns value of the <b>Subject</b> option. | |||
*/ | */ | |||
String getEvaluatorClass(); | LogString getSubject() const; | |||
/** | /** | |||
Returns value of the <b>From</b> option. | The <b>From</b> option takes a string value which s | |||
*/ | hould be a | |||
inline const String& getFrom() const | e-mail address of the sender. | |||
{ return from; } | */ | |||
void setFrom(const LogString& from); | ||||
/** | /** | |||
Returns value of the <b>Subject</b> option. | The <b>Subject</b> option takes a string value whic | |||
*/ | h should be a | |||
inline const String& getSubject() const | the subject of the e-mail message. | |||
{ return subject; } | */ | |||
void setSubject(const LogString& subject); | ||||
/** | /** | |||
The <b>Charset</b> option takes a string value which | The <b>BufferSize</b> option takes a positive integ | |||
should be the | er | |||
charset of the mail (<code>us-ascii</code>, <code>is | representing the maximum number of logging events t | |||
o8859_1</code>, | o collect in a | |||
<code>iso8859_2</code>, <code>iso8859_3</code>). | cyclic buffer. When the <code>BufferSize</code> is | |||
*/ | reached, | |||
inline void setCharset(const String& charset) | oldest events are deleted as new events are added t | |||
{ this->charset = charset; } | o the | |||
buffer. By default the size of the cyclic buffer is | ||||
512 events. | ||||
*/ | ||||
void setBufferSize(int bufferSize); | ||||
/** | /** | |||
The <b>Encoding</b> option takes a string value whic | The <b>SMTPHost</b> option takes a string value whi | |||
h should be the | ch should be a | |||
encoding type of the mail (<code>7bit</code>, <code> | the host name of the SMTP server that will send the | |||
8bit</code>, | e-mail message. | |||
<code>base64</code>, <code>binary</code>, <code>quot | */ | |||
ed</code>). | void setSMTPHost(const LogString& smtpHost); | |||
*/ | ||||
inline void setEncoding(const String& charset) | ||||
{ this->encoding = encoding; } | ||||
/** | /** | |||
The <b>From</b> option takes a string value which sh | Returns value of the <b>SMTPHost</b> option. | |||
ould be a | */ | |||
e-mail address of the sender. | LogString getSMTPHost() const; | |||
*/ | ||||
inline void setFrom(const String& from) | ||||
{ this->from = from; } | ||||
/** | /** | |||
The <b>Subject</b> option takes a string value which | The <b>SMTPPort</b> option takes a string value whi | |||
should be a | ch should be a | |||
the subject of the e-mail message. | the port of the SMTP server that will send the e-ma | |||
*/ | il message. | |||
inline void setSubject(const String& subject) | */ | |||
{ this->subject = subject; } | void setSMTPPort(int port); | |||
/** | /** | |||
The <b>BufferSize</b> option takes a positive intege | Returns value of the <b>SMTPHost</b> option. | |||
r | */ | |||
representing the maximum number of logging events to | int getSMTPPort() const; | |||
collect in a | ||||
cyclic buffer. When the <code>BufferSize</code> is r | ||||
eached, | ||||
oldest events are deleted as new events are added to | ||||
the | ||||
buffer. By default the size of the cyclic buffer is | ||||
512 events. | ||||
*/ | ||||
void setBufferSize(int bufferSize); | ||||
/** | /** | |||
The <b>SMTPHost</b> option takes a string value whic | The <b>To</b> option takes a string value which sho | |||
h should be a | uld be a | |||
the host name of the SMTP server that will send the | comma separated list of e-mail address of the recip | |||
e-mail message. | ients. | |||
*/ | */ | |||
inline void setSMTPHost(const String& smtpHost) | void setTo(const LogString& to); | |||
{ this->smtpHost = smtpHost; } | ||||
/** | /** | |||
Returns value of the <b>SMTPHost</b> option. | The <b>Cc</b> option takes a string value which sho | |||
*/ | uld be a | |||
inline const String& getSMTPHost() const | comma separated list of e-mail address of the cc'd | |||
{ return smtpHost; } | recipients. | |||
*/ | ||||
void setCc(const LogString& to); | ||||
/** | /** | |||
The <b>To</b> option takes a string value which shou | The <b>Bcc</b> option takes a string value which sh | |||
ld be a | ould be a | |||
comma separated list of e-mail address of the recipi | comma separated list of e-mail address of the bcc'd | |||
ents. | recipients. | |||
*/ | */ | |||
inline void setTo(const String& to) | void setBcc(const LogString& to); | |||
{ this->to = to; } | ||||
/** | /** | |||
Returns value of the <b>BufferSize</b> option. | The <b>SMTPUsername</b> option takes a string value | |||
*/ | which should be a | |||
inline int getBufferSize() const | the user name for the SMTP server. | |||
{ return bufferSize; } | */ | |||
void setSMTPUsername(const LogString& newVal); | ||||
/** | /** | |||
The <b>EvaluatorClass</b> option takes a string valu | Returns value of the <b>SMTPUsername</b> option. | |||
e | */ | |||
representing the name of the class implementing the | LogString getSMTPUsername() const; | |||
spi::TriggeringEventEvaluator interface. A correspon | ||||
ding object will | ||||
be instantiated and assigned as the triggering event | ||||
evaluator | ||||
for the SMTPAppender. | ||||
*/ | ||||
void setEvaluatorClass(const String& value); | ||||
/** | /** | |||
The <b>LocationInfo</b> option takes a boolean value | The <b>SMTPPassword</b> option takes a string value | |||
. By | which should be a | |||
default, it is set to false which means there will b | the password for the SMTP server. | |||
e no effort | */ | |||
to extract the location information related to the e | void setSMTPPassword(const LogString& newVal); | |||
vent. As a | ||||
result, the layout that formats the events as they a | ||||
re sent out | ||||
in an e-mail is likely to place the wrong location i | ||||
nformation | ||||
(if present in the format). | ||||
<p>Location information extraction is comparatively | /** | |||
very slow and | Returns value of the <b>SMTPPassword</b> option. | |||
should be avoided unless performance is not a concer | */ | |||
n. | LogString getSMTPPassword() const; | |||
*/ | ||||
inline void setLocationInfo(bool locationInfo) | ||||
{ this->locationInfo = locationInfo; } | ||||
/** | /** | |||
Returns value of the <b>LocationInfo</b> option. | Returns value of the <b>BufferSize</b> option. | |||
*/ | */ | |||
inline bool getLocationInfo() const | inline int getBufferSize() const | |||
{ return locationInfo; } | { return bufferSize; } | |||
}; // class SMTPAppender | ||||
class LOG4CXX_EXPORT DefaultEvaluator : | /** | |||
public virtual spi::TriggeringEventEvaluator, | * Gets the current triggering evaluator. | |||
public virtual helpers::ObjectImpl | * @return triggering evaluator. | |||
{ | */ | |||
public: | log4cxx::spi::TriggeringEventEvaluatorPtr getEvalua | |||
DECLARE_LOG4CXX_OBJECT(DefaultEvaluator) | tor() const; | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(spi::TriggeringEventEvalu | /** | |||
ator) | * Sets the triggering evaluator. | |||
END_LOG4CXX_CAST_MAP() | * @param trigger triggering evaluator. | |||
/** | */ | |||
Is this <code>event</code> the e-mail triggering eve | void setEvaluator(log4cxx::spi::TriggeringEventEval | |||
nt? | uatorPtr& trigger); | |||
<p>This method returns <code>true</code>, if the eve | ||||
nt level | /** | |||
has ERROR level or higher. Otherwise it returns | The <b>EvaluatorClass</b> option takes a string val | |||
<code>false</code>. | ue | |||
*/ | representing the name of the class implementing the | |||
virtual bool isTriggeringEvent(const spi::LoggingEve | spi::TriggeringEventEvaluator interface. A correspo | |||
ntPtr& event); | nding object will | |||
}; // class DefaultEvaluator | be instantiated and assigned as the triggering even | |||
} // namespace net | t evaluator | |||
}; // namespace log4cxx | for the SMTPAppender. | |||
*/ | ||||
void setEvaluatorClass(const LogString& value); | ||||
/** | ||||
The <b>LocationInfo</b> option is provided for comp | ||||
atibility with log4j | ||||
and has no effect in log4cxx. | ||||
*/ | ||||
void setLocationInfo(bool locationInfo); | ||||
/** | ||||
Returns value of the <b>LocationInfo</b> option. | ||||
*/ | ||||
bool getLocationInfo() const; | ||||
}; // class SMTPAppender | ||||
LOG4CXX_PTR_DEF(SMTPAppender); | ||||
} // namespace net | ||||
} // namespace log4cxx | ||||
#endif // HAVE_SMTP | ||||
#endif // _LOG4CXX_NET_SMTP_H | #endif // _LOG4CXX_NET_SMTP_H | |||
End of changes. 38 change blocks. | ||||
265 lines changed or deleted | 264 lines changed or added | |||
socket.h | socket.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_SOCKET_H | #ifndef _LOG4CXX_HELPERS_SOCKET_H | |||
#define _LOG4CXX_HELPERS_SOCKET_H | #define _LOG4CXX_HELPERS_SOCKET_H | |||
#include <log4cxx/helpers/tchar.h> | extern "C" { | |||
#include <log4cxx/helpers/socketimpl.h> | struct apr_socket_t; | |||
#include <log4cxx/helpers/socketinputstream.h> | } | |||
#include <log4cxx/helpers/socketoutputstream.h> | ||||
#include <log4cxx/helpers/inetaddress.h> | ||||
#include <log4cxx/helpers/pool.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class ServerSocker; | class ByteBuffer; | |||
/** | ||||
class Socket; | <p>This class implements client sockets (also called just " | |||
typedef helpers::ObjectPtrT<Socket> SocketPtr; | sockets"). A socket | |||
is an endpoint for communication between two machines. | ||||
class SocketOutputStream; | <p>The actual work of the socket is performed by an instanc | |||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | e of the SocketImpl | |||
StreamPtr; | class. An application, by changing the socket factory that | |||
creates the socket | ||||
class SocketInputStream; | implementation, can configure itself to create sockets appr | |||
typedef helpers::ObjectPtrT<SocketInputStream> SocketInputSt | opriate to the | |||
reamPtr; | local firewall. | |||
*/ | ||||
/** | class LOG4CXX_EXPORT Socket : public helpers::ObjectImpl | |||
<p>This class implements client sockets (also called just "s | { | |||
ockets"). A socket | public: | |||
is an endpoint for communication between two machines. | DECLARE_ABSTRACT_LOG4CXX_OBJECT(Socket) | |||
<p>The actual work of the socket is performed by an instance | BEGIN_LOG4CXX_CAST_MAP() | |||
of the SocketImpl | LOG4CXX_CAST_ENTRY(Socket) | |||
class. An application, by changing the socket factory that c | END_LOG4CXX_CAST_MAP() | |||
reates the socket | ||||
implementation, can configure itself to create sockets appro | ||||
priate to the | ||||
local firewall. | ||||
*/ | ||||
class LOG4CXX_EXPORT Socket : public helpers::ObjectImpl | ||||
{ | ||||
friend class ServerSocket; | ||||
protected: | ||||
/** Creates an unconnected socket. | ||||
*/ | ||||
Socket(); | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Socket) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Socket) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** Creates a stream socket and connects it to the s | ||||
pecified port | ||||
number at the specified IP address. | ||||
*/ | ||||
Socket(InetAddress address, int port); | ||||
/** Creates a socket and connects it to the specifie | ||||
d remote | ||||
address on the specified remote port. | ||||
*/ | ||||
Socket(InetAddress address, int port, | ||||
InetAddress localAddr, int localPort); | ||||
protected: | ||||
/** Creates an unconnected Socket | ||||
with a user-specified SocketImpl. | ||||
*/ | ||||
Socket(SocketImplPtr impl); | ||||
public: | /** Creates a stream socket and connects it to the | |||
/** Creates a stream socket and connects it to the s | specified port | |||
pecified | number at the specified IP address. | |||
port number on the named host. | */ | |||
*/ | Socket(InetAddressPtr& address, int port); | |||
Socket(const String& host, int port); | Socket(apr_socket_t* socket, apr_pool_t* pool); | |||
~Socket(); | ||||
/** Creates a socket and connects it to the specifi | size_t write(ByteBuffer&); | |||
ed remote | ||||
host on the specified remote port. | ||||
*/ | ||||
Socket(const String& host, int port, | ||||
InetAddress localAddr, int localPort); | ||||
size_t read(void * buf, size_t len) const | /** Closes this socket. */ | |||
{ return socketImpl->read(buf, len); } | void close(); | |||
size_t write(const void * buf, size_t len) | /** Returns the value of this socket's address fiel | |||
{ return socketImpl->write(buf, len); } | d. */ | |||
InetAddressPtr getInetAddress() const; | ||||
/** Closes this socket. */ | /** Returns the value of this socket's port field. | |||
void close() | */ | |||
{ socketImpl->close(); } | int getPort() const; | |||
private: | ||||
Socket(const Socket&); | ||||
Socket& operator=(const Socket&); | ||||
/** Returns the value of this socket's address field | Pool pool; | |||
. */ | ||||
inline InetAddress getInetAddress() const | ||||
{ return socketImpl->getInetAddress(); } | ||||
/** Returns the value of this socket's localport fie | apr_socket_t* socket; | |||
ld. */ | ||||
inline int getLocalPort() const | ||||
{ return socketImpl->getLocalPort(); } | ||||
/** Returns the value of this socket's port field. * | /** The IP address of the remote end of this socket. | |||
/ | */ | |||
inline int getPort() const | InetAddressPtr address; | |||
{ return socketImpl->getPort(); } | ||||
/** Returns an output stream for this socket. */ | /** The port number on the remote host to which | |||
SocketOutputStreamPtr getOutputStream(); | this socket is connected. */ | |||
int port; | ||||
}; | ||||
/** Returns an input stream for this socket. */ | LOG4CXX_PTR_DEF(Socket); | |||
SocketInputStreamPtr getInputStream(); | ||||
protected: | } // namespace helpers | |||
SocketImplPtr socketImpl; | } // namespace log4cxx | |||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_SOCKET_H | #endif // _LOG4CXX_HELPERS_SOCKET_H | |||
End of changes. 14 change blocks. | ||||
108 lines changed or deleted | 65 lines changed or added | |||
socketappender.h | socketappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_SOCKET_APPENDER_H | #ifndef _LOG4CXX_NET_SOCKET_APPENDER_H | |||
#define _LOG4CXX_NET_SOCKET_APPENDER_H | #define _LOG4CXX_NET_SOCKET_APPENDER_H | |||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/net/socketappenderskeleton.h> | |||
#include <log4cxx/helpers/socket.h> | #include <log4cxx/helpers/objectoutputstream.h> | |||
#include <log4cxx/helpers/thread.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace net | |||
{ | { | |||
class SocketOutputStream; | ||||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | ||||
StreamPtr; | ||||
} | ||||
namespace net | ||||
{ | ||||
class LOG4CXX_EXPORT SocketAppender; | ||||
typedef helpers::ObjectPtrT<SocketAppender> SocketAppenderPt | ||||
r; | ||||
/** | /** | |||
Sends {@link spi::LoggingEvent LoggingEvent} objects to a remote a | Sends {@link log4cxx::spi::LoggingEvent LoggingEvent} objects to a | |||
log server, | remote a log server, | |||
usually a {@link net::SocketNode SocketNode}. | usually Apache Chainsaw. | |||
<p>The SocketAppender has the following properties: | <p>The SocketAppender has the following properties: | |||
- If sent to a {@link net::SocketNode SocketNode}, remote logging | - If sent to Apache Chainsaw, remote logging | |||
is non-intrusive as far as the log event is concerned. In ot | is non-intrusive as far as the log event is concerned. In o | |||
her | ther | |||
words, the event will be logged with the same time stamp, {@link | words, the event will be logged with the same time stamp, {@link | |||
NDC NDC}, location info as if it were logged locally by | NDC NDC}, location info as if it were logged locally by | |||
the client. | the client. | |||
- SocketAppenders do not use a layout. They ship a | - SocketAppenders do not use a layout. They ship a | |||
serialized {@link spi::LoggingEvent LoggingEvent} object | serialized {@link log4cxx::spi::LoggingEvent LoggingEvent} object | |||
to the server side. | to the server side. | |||
- Remote logging uses the TCP protocol. Consequently, if | - Remote logging uses the TCP protocol. Consequently, if | |||
the server is reachable, then log events will eventually arrive | the server is reachable, then log events will eventually arrive | |||
at the server. | at the server. | |||
- If the remote server is down, the logging requests are | - If the remote server is down, the logging requests are | |||
simply dropped. However, if and when the server comes back up, | simply dropped. However, if and when the server comes back up, | |||
then event transmission is resumed transparently. This | then event transmission is resumed transparently. This | |||
transparent reconneciton is performed by a <em>connector</em> | transparent reconneciton is performed by a <em>connector</em> | |||
thread which periodically attempts to connect to the server. | thread which periodically attempts to connect to the server. | |||
skipping to change at line 87 | skipping to change at line 79 | |||
the presence of a connector thread. A connector thread exists | the presence of a connector thread. A connector thread exists | |||
only if the connection to the server is down. To avoid this | only if the connection to the server is down. To avoid this | |||
destruction problem, you should #close the the | destruction problem, you should #close the the | |||
<code>SocketAppender</code> explicitly. See also next item. | <code>SocketAppender</code> explicitly. See also next item. | |||
@n @n Long lived applications which create/destroy many | @n @n Long lived applications which create/destroy many | |||
<code>SocketAppender</code> instances should be aware of this | <code>SocketAppender</code> instances should be aware of this | |||
destruction problem. Most other applications can safely | destruction problem. Most other applications can safely | |||
ignore it. | ignore it. | |||
- If the application hosting the <code>SocketAppender</code> | - If the application hosting the <code>SocketAppender</code> | |||
exits before the <code>SocketAppender</code> is closed eithe r | exits before the <code>SocketAppender</code> is closed eith er | |||
explicitly or subsequent to destruction, then there might | explicitly or subsequent to destruction, then there might | |||
be untransmitted data in the pipe which might be lost. | be untransmitted data in the pipe which might be lost. | |||
@n @n To avoid lost data, it is usually sufficient to | @n @n To avoid lost data, it is usually sufficient to | |||
#close the <code>SocketAppender</code> either explicitly or by | #close the <code>SocketAppender</code> either explicitly or by | |||
calling the LogManager#shutdown method | calling the LogManager#shutdown method | |||
before exiting the application. | before exiting the application. | |||
*/ | */ | |||
class LOG4CXX_EXPORT SocketAppender : public AppenderSkeleton | class LOG4CXX_EXPORT SocketAppender : public SocketAppenderSkeleton | |||
{ | { | |||
class Connector; | public: | |||
friend class Connector; | /** | |||
public: | The default port number of remote logging server (4560). | |||
/** | */ | |||
The default port number of remote logging server (4560). | static int DEFAULT_PORT; | |||
*/ | ||||
static int DEFAULT_PORT; | ||||
/** | ||||
The default reconnection delay (30000 milliseconds or 30 sec | ||||
onds). | ||||
*/ | ||||
static int DEFAULT_RECONNECTION_DELAY; | ||||
protected: | ||||
/** | ||||
host name | ||||
*/ | ||||
String remoteHost; | ||||
/** | ||||
IP address | ||||
*/ | ||||
helpers::InetAddress address; | ||||
int port; | ||||
helpers::SocketOutputStreamPtr os; | ||||
int reconnectionDelay; | ||||
bool locationInfo; | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(SocketAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(SocketAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
SocketAppender(); | ||||
~SocketAppender(); | ||||
/** | ||||
Connects to remote server at <code>address</code> and <code> | ||||
port</code>. | ||||
*/ | ||||
SocketAppender(unsigned long address, int port); | ||||
/** | ||||
Connects to remote server at <code>host</code> and <code>por | ||||
t</code>. | ||||
*/ | ||||
SocketAppender(const String& host, int port); | ||||
/** | ||||
Connect to the specified <b>RemoteHost</b> and <b>Port</b>. | ||||
*/ | ||||
void activateOptions(); | ||||
/** | ||||
Set options | ||||
*/ | ||||
virtual void setOption(const String& option, const S | ||||
tring& value); | ||||
/** | ||||
* Close this appender. | ||||
* | ||||
* <p>This will mark the appender as closed and call then | ||||
* #cleanUp method. | ||||
* */ | ||||
void close(); | ||||
/** | ||||
* Drop the connection to the remote host and release the und | ||||
erlying | ||||
* connector thread if it has been created | ||||
* */ | ||||
void cleanUp(); | ||||
void connect(); | ||||
virtual void append(const spi::LoggingEventPtr& event); | ||||
/** | ||||
* The SocketAppender does not use a layout. Hence, this meth | ||||
od | ||||
* returns <code>false</code>. | ||||
* */ | ||||
bool requiresLayout() const | ||||
{ return false; } | ||||
/** | ||||
* The <b>RemoteHost</b> option takes a string value which sh | ||||
ould be | ||||
* the host name of the server where a | ||||
* {@link net::SocketNode SocketNode} is running. | ||||
* */ | ||||
inline void setRemoteHost(const String& host) | ||||
{ address = helpers::InetAddress::getByName(host); | ||||
remoteHost = host; } | ||||
/** | ||||
Returns value of the <b>RemoteHost</b> option. | ||||
*/ | ||||
inline const String& getRemoteHost() const | ||||
{ return remoteHost; } | ||||
/** | /** | |||
The <b>Port</b> option takes a positive integer representing | The default reconnection delay (30000 milliseconds or 30 se | |||
the port where the server is waiting for connections. | conds). | |||
*/ | */ | |||
void setPort(int port) | static int DEFAULT_RECONNECTION_DELAY; | |||
{ this->port = port; } | ||||
/** | DECLARE_LOG4CXX_OBJECT(SocketAppender) | |||
Returns value of the <b>Port</b> option. | BEGIN_LOG4CXX_CAST_MAP() | |||
*/ | LOG4CXX_CAST_ENTRY(SocketAppender) | |||
int getPort() const | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
{ return port; } | END_LOG4CXX_CAST_MAP() | |||
/** | SocketAppender(); | |||
The <b>LocationInfo</b> option takes a boolean value. If tru | ~SocketAppender(); | |||
e, | ||||
the information sent to the remote host will include locatio | ||||
n | ||||
information. By default no location information is sent to t | ||||
he server. | ||||
*/ | ||||
void setLocationInfo(bool locationInfo) | ||||
{ this->locationInfo = locationInfo; } | ||||
/** | /** | |||
Returns value of the <b>LocationInfo</b> option. | Connects to remote server at <code>address</code> and <code | |||
*/ | >port</code>. | |||
bool getLocationInfo() const | */ | |||
{ return locationInfo; } | SocketAppender(helpers::InetAddressPtr& address, int port); | |||
/** | /** | |||
The <b>ReconnectionDelay</b> option takes a positive integer | Connects to remote server at <code>host</code> and <code>po | |||
representing the number of milliseconds to wait between each | rt</code>. | |||
failed connection attempt to the server. The default value o | */ | |||
f | SocketAppender(const LogString& host, int port); | |||
this option is 30000 which corresponds to 30 seconds. | ||||
<p>Setting this option to zero turns off reconnection | protected: | |||
capability. | virtual void setSocket(log4cxx::helpers::SocketPtr& socket, | |||
*/ | log4cxx::helpers::Pool& p); | |||
void setReconnectionDelay(int reconnectionDelay) | ||||
{ this->reconnectionDelay = reconnectionDelay; } | ||||
/** | virtual void cleanUp(log4cxx::helpers::Pool& p); | |||
Returns value of the <b>ReconnectionDelay</b> option. | ||||
*/ | ||||
int getReconnectionDelay() const | ||||
{ return reconnectionDelay; } | ||||
void fireConnector(); | virtual int getDefaultDelay() const; | |||
private: | virtual int getDefaultPort() const; | |||
/** | ||||
The Connector will reconnect when the server becomes | ||||
available | ||||
again. It does this by attempting to open a new con | ||||
nection every | ||||
<code>reconnectionDelay</code> milliseconds. | ||||
<p>It stops trying whenever a connection is establis | void append(const spi::LoggingEventPtr& event, log4cxx::hel | |||
hed. It will | pers::Pool& pool); | |||
restart to try reconnect to the server when previpou | ||||
sly open | ||||
connection is droppped. | ||||
*/ | ||||
class LOG4CXX_EXPORT Connector : public helpers::Thr | ||||
ead | ||||
{ | ||||
public: | ||||
typedef helpers::Thread BASE_CLASS; | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Connector) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | ||||
END_LOG4CXX_CAST_MAP() | ||||
bool interrupted; | private: | |||
SocketAppender * socketAppender; | log4cxx::helpers::ObjectOutputStreamPtr oos; | |||
Connector(SocketAppender * socketAppender); | }; // class SocketAppender | |||
virtual void run(); | ||||
}; // class Connector | ||||
typedef helpers::ObjectPtrT<Connector> ConnectorPtr; | LOG4CXX_PTR_DEF(SocketAppender); | |||
ConnectorPtr connector; | ||||
}; // class SocketAppender | ||||
} // namespace net | } // namespace net | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif // _LOG4CXX_NET_SOCKET_APPENDER_H | #endif // _LOG4CXX_NET_SOCKET_APPENDER_H | |||
End of changes. 23 change blocks. | ||||
210 lines changed or deleted | 61 lines changed or added | |||
sockethubappender.h | sockethubappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | #ifndef _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | |||
#define _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | #define _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/socket.h> | ||||
#include <log4cxx/helpers/thread.h> | ||||
#include <vector> | #include <vector> | |||
#include <log4cxx/helpers/socket.h> | #include <log4cxx/helpers/thread.h> | |||
#include <log4cxx/helpers/objectoutputstream.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers { | |||
{ | class ObjectOutputStream; | |||
class SocketOutputStream; | typedef ObjectPtrT<ObjectOutputStream> ObjectOutputStreamPt | |||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | r; | |||
StreamPtr; | } | |||
} | namespace net | |||
{ | ||||
namespace net | /** | |||
{ | Sends {@link log4cxx::spi::LoggingEvent LoggingEvent} objec | |||
/** | ts to a set of remote log | |||
Sends {@link spi::LoggingEvent LoggingEvent} objects to a se | servers, usually a SocketNode. | |||
t of remote log | ||||
servers, usually a SocketNode. | ||||
<p>Acts just like SocketAppender except that instead of | ||||
connecting to a given remote log server, | ||||
<code>SocketHubAppender</code> accepts connections from the | ||||
remote | ||||
log servers as clients. It can accept more than one connect | ||||
ion. | ||||
When a log event is received, the event is sent to the set o | ||||
f | ||||
currently connected remote log servers. Implemented this way | ||||
it does | ||||
not require any update to the configuration file to send dat | ||||
a to | ||||
another remote log server. The remote log server simply conn | ||||
ects to | ||||
the host and port the <code>SocketHubAppender</code> is runn | ||||
ing on. | ||||
<p>The <code>SocketHubAppender</code> does not store events | ||||
such | ||||
that the remote side will events that arrived after the | ||||
establishment of its connection. Once connected, events arri | ||||
ve in | ||||
order as guaranteed by the TCP protocol. | ||||
<p>This implementation borrows heavily from the SocketAppend | ||||
er. | ||||
<p>The SocketHubAppender has the following characteristics: | ||||
- If sent to a SocketNode, logging is non-intrusive as | <p>Acts just like SocketAppender except that instead of | |||
far as the log event is concerned. In other words, the event | connecting to a given remote log server, | |||
will be | <code>SocketHubAppender</code> accepts connections from the | |||
logged with the same time stamp, NDC, | remote | |||
location info as if it were logged locally. | log servers as clients. It can accept more than one connec | |||
tion. | ||||
When a log event is received, the event is sent to the set | ||||
of | ||||
currently connected remote log servers. Implemented this wa | ||||
y it does | ||||
not require any update to the configuration file to send da | ||||
ta to | ||||
another remote log server. The remote log server simply con | ||||
nects to | ||||
the host and port the <code>SocketHubAppender</code> is run | ||||
ning on. | ||||
- <code>SocketHubAppender</code> does not use a layout. It | <p>The <code>SocketHubAppender</code> does not store events | |||
ships a serialized spi::LoggingEvent object to the remote si | such | |||
de. | that the remote side will events that arrived after the | |||
establishment of its connection. Once connected, events arr | ||||
ive in | ||||
order as guaranteed by the TCP protocol. | ||||
- <code>SocketHubAppender</code> relies on the TCP | <p>This implementation borrows heavily from the SocketAppen | |||
protocol. Consequently, if the remote side is reachable, the | der. | |||
n log | ||||
events will eventually arrive at remote client. | ||||
- If no remote clients are attached, the logging requests ar | <p>The SocketHubAppender has the following characteristics: | |||
e | ||||
simply dropped. | ||||
- Logging events are automatically <em>buffered</em> by the | - If sent to a SocketNode, logging is non-intrusive as | |||
native TCP implementation. This means that if the link to re | far as the log event is concerned. In other words, the even | |||
mote | t will be | |||
client is slow but still faster than the rate of (log) event | logged with the same time stamp, NDC, | |||
production, the application will not be affected by the slow | location info as if it were logged locally. | |||
network | ||||
connection. However, if the network connection is slower the | ||||
n the | ||||
rate of event production, then the local application can onl | ||||
y | ||||
progress at the network rate. In particular, if the network | ||||
link to | ||||
the the remote client is down, the application will be block | ||||
ed. | ||||
@n @n On the other hand, if the network link is up, but the | ||||
remote | ||||
client is down, the client will not be blocked when making l | ||||
og | ||||
requests but the log events will be lost due to client | ||||
unavailability. | ||||
@n @n The single remote client case extends to multiple clie | ||||
nts | ||||
connections. The rate of logging will be determined by the s | ||||
lowest | ||||
link. | ||||
- If the application hosting the <code>SocketHubAppender</co | - <code>SocketHubAppender</code> does not use a layout. It | |||
de> | ships a serialized spi::LoggingEvent object to the remote s | |||
exits before the <code>SocketHubAppender</code> is closed ei | ide. | |||
ther | ||||
explicitly or subsequent to garbage collection, then there m | ||||
ight | ||||
be untransmitted data in the pipe which might be lost. This | ||||
is a | ||||
common problem on Windows based systems. | ||||
@n @n To avoid lost data, it is usually sufficient to #close | ||||
the <code>SocketHubAppender</code> either explicitly or by c | ||||
alling | ||||
the LogManager#shutdown method before | ||||
exiting the application. | ||||
*/ | ||||
class LOG4CXX_EXPORT SocketHubAppender : public AppenderSkel | - <code>SocketHubAppender</code> relies on the TCP | |||
eton | protocol. Consequently, if the remote side is reachable, th | |||
{ | en log | |||
private: | events will eventually arrive at remote client. | |||
/** | ||||
The default port number of the ServerSocket will be | ||||
created on. | ||||
*/ | ||||
static int DEFAULT_PORT; | ||||
int port; | - If no remote clients are attached, the logging requests a | |||
std::vector<helpers::SocketOutputStreamPtr> oosList; | re | |||
bool locationInfo; | simply dropped. | |||
public: | - Logging events are automatically <em>buffered</em> by the | |||
DECLARE_LOG4CXX_OBJECT(SocketHubAppender) | native TCP implementation. This means that if the link to r | |||
BEGIN_LOG4CXX_CAST_MAP() | emote | |||
LOG4CXX_CAST_ENTRY(SocketHubAppender) | client is slow but still faster than the rate of (log) even | |||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | t | |||
END_LOG4CXX_CAST_MAP() | production, the application will not be affected by the slo | |||
w network | ||||
connection. However, if the network connection is slower th | ||||
en the | ||||
rate of event production, then the local application can on | ||||
ly | ||||
progress at the network rate. In particular, if the network | ||||
link to | ||||
the the remote client is down, the application will be bloc | ||||
ked. | ||||
@n @n On the other hand, if the network link is up, but the | ||||
remote | ||||
client is down, the client will not be blocked when making | ||||
log | ||||
requests but the log events will be lost due to client | ||||
unavailability. | ||||
@n @n The single remote client case extends to multiple cli | ||||
ents | ||||
connections. The rate of logging will be determined by the | ||||
slowest | ||||
link. | ||||
SocketHubAppender(); | - If the application hosting the <code>SocketHubAppender</c | |||
~SocketHubAppender(); | ode> | |||
exits before the <code>SocketHubAppender</code> is closed e | ||||
ither | ||||
explicitly or subsequent to garbage collection, then there | ||||
might | ||||
be untransmitted data in the pipe which might be lost. This | ||||
is a | ||||
common problem on Windows based systems. | ||||
@n @n To avoid lost data, it is usually sufficient to #clos | ||||
e | ||||
the <code>SocketHubAppender</code> either explicitly or by | ||||
calling | ||||
the LogManager#shutdown method before | ||||
exiting the application. | ||||
*/ | ||||
/** | class LOG4CXX_EXPORT SocketHubAppender : public AppenderSke | |||
Connects to remote server at <code>address</code> an | leton | |||
d <code>port</code>. | { | |||
*/ | private: | |||
SocketHubAppender(int port) ; | /** | |||
The default port number of the ServerSocket will be | ||||
created on. | ||||
*/ | ||||
static int DEFAULT_PORT; | ||||
/** | int port; | |||
Set up the socket server on the specified port. | LOG4CXX_LIST_DEF(ObjectOutputStreamList, log4cxx::h | |||
*/ | elpers::ObjectOutputStreamPtr); | |||
virtual void activateOptions(); | ObjectOutputStreamList streams; | |||
bool locationInfo; | ||||
/** | public: | |||
Set options | DECLARE_LOG4CXX_OBJECT(SocketHubAppender) | |||
*/ | BEGIN_LOG4CXX_CAST_MAP() | |||
virtual void setOption(const String& option, const S | LOG4CXX_CAST_ENTRY(SocketHubAppender) | |||
tring& value); | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
END_LOG4CXX_CAST_MAP() | ||||
/** | SocketHubAppender(); | |||
Close this appender. | ~SocketHubAppender(); | |||
<p>This will mark the appender as closed and | ||||
call then #cleanUp method. | ||||
*/ | ||||
virtual void close(); | ||||
/** | /** | |||
Release the underlying ServerMonitor thread, and dro | Connects to remote server at <code>address</code> a | |||
p the connections | nd <code>port</code>. | |||
to all connected remote servers. */ | */ | |||
void cleanUp(); | SocketHubAppender(int port) ; | |||
/** | /** | |||
Append an event to all of current connections. */ | Set up the socket server on the specified port. | |||
virtual void append(const spi::LoggingEventPtr& even | */ | |||
t); | virtual void activateOptions(log4cxx::helpers::Pool | |||
& p); | ||||
/** | /** | |||
The SocketHubAppender does not use a layout. Hence, | Set options | |||
this method returns | */ | |||
<code>false</code>. */ | virtual void setOption(const LogString& option, con | |||
virtual bool requiresLayout() const | st LogString& value); | |||
{ return false; } | ||||
/** | virtual void close(); | |||
The <b>Port</b> option takes a positive integer repr | ||||
esenting | ||||
the port where the server is waiting for connections | ||||
. */ | ||||
inline void setPort(int port) | ||||
{ this->port = port; } | ||||
/** | /** | |||
Returns value of the <b>Port</b> option. */ | Append an event to all of current connections. */ | |||
inline int getPort() const | virtual void append(const spi::LoggingEventPtr& eve | |||
{ return port; } | nt, log4cxx::helpers::Pool& p); | |||
/** | /** | |||
The <b>LocationInfo</b> option takes a boolean value | The SocketHubAppender does not use a layout. Hence, | |||
. If true, | this method returns | |||
the information sent to the remote host will include | <code>false</code>. */ | |||
location | virtual bool requiresLayout() const | |||
information. By default no location information is s | { return false; } | |||
ent to the server. */ | ||||
inline void setLocationInfo(bool locationInfo) | ||||
{ this->locationInfo = locationInfo; } | ||||
/** | /** | |||
Returns value of the <b>LocationInfo</b> option. */ | The <b>Port</b> option takes a positive integer rep | |||
inline bool getLocationInfo() const | resenting | |||
{ return locationInfo; } | the port where the server is waiting for connection | |||
s. */ | ||||
inline void setPort(int port1) | ||||
{ this->port = port1; } | ||||
/** | /** | |||
Start the ServerMonitor thread. */ | Returns value of the <b>Port</b> option. */ | |||
private: | inline int getPort() const | |||
void startServer(); | { return port; } | |||
/** | /** | |||
This class is used internally to monitor a ServerSoc | The <b>LocationInfo</b> option takes a boolean valu | |||
ket | e. If true, | |||
and register new connections in a vector passed in t | the information sent to the remote host will includ | |||
he | e location | |||
constructor. */ | information. By default no location information is | |||
class LOG4CXX_EXPORT ServerMonitor : | sent to the server. */ | |||
public helpers::Runnable, | inline void setLocationInfo(bool locationInfo1) | |||
public helpers::ObjectImpl | { this->locationInfo = locationInfo1; } | |||
{ | ||||
private: | ||||
int port; | ||||
std::vector<helpers::SocketOutputStreamPtr> | ||||
oosList; | ||||
bool keepRunning; | ||||
helpers::Thread * monitorThread; | ||||
public: | /** | |||
BEGIN_LOG4CXX_CAST_MAP() | Returns value of the <b>LocationInfo</b> option. */ | |||
LOG4CXX_CAST_ENTRY(ServerMonitor) | inline bool getLocationInfo() const | |||
END_LOG4CXX_CAST_MAP() | { return locationInfo; } | |||
/** | /** | |||
Create a thread and start the monitor. */ | Start the ServerMonitor thread. */ | |||
ServerMonitor(int port, | private: | |||
const std::vector<helpers::SocketOutputStrea | void startServer(); | |||
mPtr>& oosList); | ||||
/** | helpers::Thread thread; | |||
Stops the monitor. This method will not retu | static void* LOG4CXX_THREAD_FUNC monitor(apr_thread | |||
rn until | _t* thread, void* data); | |||
the thread has finished executing. */ | ||||
void stopMonitor(); | ||||
/** | }; // class SocketHubAppender | |||
Method that runs, monitoring the ServerSocke | LOG4CXX_PTR_DEF(SocketHubAppender); | |||
t and adding connections as | } // namespace net | |||
they connect to the socket. */ | } // namespace log4cxx | |||
void run(); | ||||
}; // class ServerMonitor | ||||
typedef helpers::ObjectPtrT<ServerMonitor> ServerMon | #if defined(_MSC_VER) | |||
itorPtr; | #pragma warning ( pop ) | |||
ServerMonitorPtr serverMonitor; | #endif | |||
}; // class SocketHubAppender | ||||
} // namespace net | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | #endif // _LOG4CXX_NET_SOCKET_HUB_APPENDER_H | |||
End of changes. 33 change blocks. | ||||
230 lines changed or deleted | 192 lines changed or added | |||
socketoutputstream.h | socketoutputstream.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | #ifndef _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | |||
#define _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | #define _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#include <log4cxx/helpers/objectimpl.h> | #pragma warning ( push ) | |||
#include <log4cxx/helpers/objectptr.h> | #pragma warning ( disable: 4231 4251 4275 4786 ) | |||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <log4cxx/helpers/outputstream.h> | ||||
#include <log4cxx/helpers/socket.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class Socket; | ||||
typedef ObjectPtrT<Socket> SocketPtr; | ||||
class SocketOutputStream; | ||||
typedef ObjectPtrT<SocketOutputStream> SocketOutputStreamPtr | ||||
; | ||||
class LOG4CXX_EXPORT SocketOutputStream : public ObjectImpl | class LOG4CXX_EXPORT SocketOutputStream : public OutputStre | |||
{ | am | |||
public: | { | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(SocketOutputStream) | public: | |||
BEGIN_LOG4CXX_CAST_MAP() | DECLARE_ABSTRACT_LOG4CXX_OBJECT(SocketOutputStream) | |||
LOG4CXX_CAST_ENTRY(SocketOutputStream) | BEGIN_LOG4CXX_CAST_MAP() | |||
END_LOG4CXX_CAST_MAP() | LOG4CXX_CAST_ENTRY(SocketOutputStream) | |||
LOG4CXX_CAST_ENTRY_CHAIN(OutputStream) | ||||
END_LOG4CXX_CAST_MAP() | ||||
SocketOutputStream(SocketPtr socket); | SocketOutputStream(const SocketPtr& socket); | |||
~SocketOutputStream(); | ~SocketOutputStream(); | |||
void write(const void * buffer, size_t len); | virtual void close(Pool& p); | |||
void write(unsigned int value); | virtual void flush(Pool& p); | |||
void write(int value); | virtual void write(ByteBuffer& buf, Pool& p); | |||
void write(unsigned long value); | ||||
void write(long value); | ||||
void write(const String& value); | ||||
// some write functions are missing ... | ||||
/** Close the stream and dereference the socket. | private: | |||
*/ | LOG4CXX_LIST_DEF(ByteList, unsigned char); | |||
void close(); | ByteList array; | |||
SocketPtr socket; | ||||
// | ||||
// prevent copy and assignment statements | ||||
SocketOutputStream(const SocketOutputStream&); | ||||
SocketOutputStream& operator=(const SocketOutputStre | ||||
am&); | ||||
/** Flushes this output stream and forces any buffer | }; | |||
ed output | ||||
bytes to be written out. | ||||
*/ | ||||
void flush(); | ||||
protected: | LOG4CXX_PTR_DEF(SocketOutputStream); | |||
SocketPtr socket; | ||||
/** memory stream buffer */ | } // namespace helpers | |||
/* class membuf : | } // namespace log4cxx | |||
public std::basic_streambuf<char, std::char_ | ||||
traits<char> > | ||||
{ | ||||
public: | ||||
const void * buffer() const; | ||||
const size_t size() const; | ||||
}*/ | ||||
unsigned char * beg, * cur, * end; | #if defined(_MSC_VER) | |||
}; | #pragma warning ( pop ) | |||
} // namespace helpers | #endif | |||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | #endif // _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H | |||
End of changes. 11 change blocks. | ||||
55 lines changed or deleted | 46 lines changed or added | |||
strictmath.h | strictmath.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_STRICTMATH_H | #ifndef _LOG4CXX_HELPERS_STRICTMATH_H | |||
#define _LOG4CXX_HELPERS_STRICTMATH_H | #define _LOG4CXX_HELPERS_STRICTMATH_H | |||
#include <log4cxx/config.h> | #include <log4cxx/log4cxx.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
The class StrictMath contains methods for performing basic n | The class StrictMath contains methods for performing basic | |||
umeric | numeric | |||
operations | operations | |||
*/ | */ | |||
class StrictMath | class StrictMath | |||
{ | { | |||
public: | public: | |||
template<typename _type> static inline const _type& | template<typename _type> static inline const _type& | |||
minimum(const _type& a, const _type& b) | minimum(const _type& a, const _type& b) | |||
{ | { | |||
return (a < b) ? a : b; | return (a < b) ? a : b; | |||
} | } | |||
template<typename _type> static inline const _type& | template<typename _type> static inline const _type& | |||
maximum(const _type& a, const _type& b) | maximum(const _type& a, const _type& b) | |||
{ | { | |||
return (a > b) ? a : b; | return (a > b) ? a : b; | |||
} | } | |||
}; // class StrictMath | }; // class StrictMath | |||
} // namespace helpers | } // namespace helpers | |||
}; // namespace log4cx | } // namespace log4cx | |||
#endif //_LOG4CXX_HELPERS_STRICTMATH_H | #endif //_LOG4CXX_HELPERS_STRICTMATH_H | |||
End of changes. 4 change blocks. | ||||
29 lines changed or deleted | 30 lines changed or added | |||
stringhelper.h | stringhelper.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_STRING_HELPER_H | #ifndef _LOG4CXX_HELPERS_STRING_HELPER_H | |||
#define _LOG4CXX_HELPERS_STRING_HELPER_H | #define _LOG4CXX_HELPERS_STRING_HELPER_H | |||
#include <log4cxx/config.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <vector> | |||
#include <stdarg.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | class Pool; | |||
String manipulation routines | /** | |||
*/ | String manipulation routines | |||
*/ | ||||
class LOG4CXX_EXPORT StringHelper | class LOG4CXX_EXPORT StringHelper | |||
{ | { | |||
public: | public: | |||
static String toUpperCase(const String& s); | static LogString trim(const LogString& s); | |||
static String toLowerCase(const String& s); | static bool startsWith(const LogString& s, const LogString& suf | |||
static String trim(const String& s); | fix); | |||
static bool equalsIgnoreCase(const String& s1, const | static bool endsWith(const LogString& s, const LogString& suffi | |||
String& s2); | x); | |||
static bool endsWith(const String& s, const String& | static bool equalsIgnoreCase(const LogString& s1, | |||
suffix); | const logchar* upper, const logchar* lower); | |||
/** | static bool equalsIgnoreCase(const LogString& s1, | |||
Creates a message with the given pattern and uses it | const LogString& upper, const LogString& lower); | |||
to format the | ||||
given arguments. | ||||
This method provides a means to produce concatenated | static int toInt(const LogString& s); | |||
messages in | static log4cxx_int64_t toInt64(const LogString& s); | |||
language-neutral way. | ||||
@param pattern the pattern for this message. The dif | static void toString(int i, log4cxx::helpers::Pool& pool, LogSt | |||
ferent arguments | ring& dst); | |||
are represented in the pattern string by the symbols | static void toString(log4cxx_int64_t i, log4cxx::helpers::Pool& | |||
{0} to {9} | pool, LogString& dst); | |||
static void toString(size_t i, log4cxx::helpers::Pool& pool, Lo | ||||
gString& dst); | ||||
@param argList a variable list of srrings to be form | static void toString(bool val, LogString& dst); | |||
atted and | ||||
substituted. The type of the strings must be (TCHAR | static LogString toLowerCase(const LogString& s); | |||
*). | ||||
*/ | static LogString format(const LogString& pattern, const std::ve | |||
static String format(const String& pattern, va_list | ctor<LogString>& params); | |||
argList); | ||||
}; | }; | |||
} | } | |||
} | } | |||
#endif //_LOG4CXX_HELPERS_STRING_HELPER_H | #endif //_LOG4CXX_HELPERS_STRING_HELPER_H | |||
End of changes. 7 change blocks. | ||||
36 lines changed or deleted | 35 lines changed or added | |||
stringmatchfilter.h | stringmatchfilter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_VARIA_STRING_MATCH_FILTER_H | #ifndef _LOG4CXX_FILTER_STRING_MATCH_FILTER_H | |||
#define _LOG4CXX_VARIA_STRING_MATCH_FILTER_H | #define _LOG4CXX_FILTER_STRING_MATCH_FILTER_H | |||
#include <log4cxx/spi/filter.h> | #include <log4cxx/spi/filter.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace varia | namespace filter | |||
{ | { | |||
/** | /** | |||
This is a very simple filter based on string matching. | This is a very simple filter based on string matching. | |||
<p>The filter admits two options <b>StringToMatch</b> and | ||||
<b>AcceptOnMatch</b>. If there is a match between the value | ||||
of the | ||||
StringToMatch option and the message of the {@link spi::Logg | ||||
ingEvent | ||||
LoggingEvent}, then the #decide method returns | ||||
{@link spi::Filter#ACCEPT ACCEPT} if the <b>AcceptOnMatch</b | ||||
> option | ||||
value is true, if it is false then {@link spi::Filter#DENY D | ||||
ENY} is | ||||
returned. If there is no match, {@link spi::Filter#NEUTRAL N | ||||
EUTRAL} | ||||
is returned. | ||||
<p>See configuration files <a | ||||
href="../xml/doc-files/test6.xml">test6.xml</a>, <a | ||||
href="../xml/doc-files/test7.xml">test7.xml</a>, <a | ||||
href="../xml/doc-files/test8.xml">test8.xml</a>, <a | ||||
href="../xml/doc-files/test9.xml">test9.xml</a>, and <a | ||||
href="../xml/doc-files/test10.xml">test10.xml</a> for exampl | ||||
es of | ||||
seeting up a <code>StringMatchFilter</code>. | ||||
*/ | ||||
class StringMatchFilter; | <p>The filter admits two options <b>StringToMatch</b> and | |||
typedef helpers::ObjectPtrT<StringMatchFilter> StringMatchFi | <b>AcceptOnMatch</b>. If there is a match between the value | |||
lterPtr; | of the | |||
StringToMatch option and the message of the {@link spi::Log | ||||
gingEvent | ||||
LoggingEvent}, then the #decide method returns | ||||
{@link log4cxx::spi::Filter#ACCEPT ACCEPT} if the <b>Accept | ||||
OnMatch</b> option | ||||
value is true, if it is false then {@link log4cxx::spi::Fil | ||||
ter#DENY DENY} is | ||||
returned. If there is no match, {@link log4cxx::spi::Filter | ||||
#NEUTRAL NEUTRAL} | ||||
is returned. | ||||
class LOG4CXX_EXPORT StringMatchFilter : public spi::Filter | <p>See configuration files <a | |||
{ | href="../xml/doc-files/test6.xml">test6.xml</a>, <a | |||
private: | href="../xml/doc-files/test7.xml">test7.xml</a>, <a | |||
static String STRING_TO_MATCH_OPTION; | href="../xml/doc-files/test8.xml">test8.xml</a>, <a | |||
static String ACCEPT_ON_MATCH_OPTION; | href="../xml/doc-files/test9.xml">test9.xml</a>, and <a | |||
href="../xml/doc-files/test10.xml">test10.xml</a> for examp | ||||
les of | ||||
seeting up a <code>StringMatchFilter</code>. | ||||
*/ | ||||
bool acceptOnMatch; | class LOG4CXX_EXPORT StringMatchFilter : public spi::Filter | |||
String stringToMatch; | { | |||
private: | ||||
bool acceptOnMatch; | ||||
LogString stringToMatch; | ||||
public: | public: | |||
typedef spi::Filter BASE_CLASS; | typedef spi::Filter BASE_CLASS; | |||
DECLARE_LOG4CXX_OBJECT(StringMatchFilter) | DECLARE_LOG4CXX_OBJECT(StringMatchFilter) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(StringMatchFilter) | LOG4CXX_CAST_ENTRY(StringMatchFilter) | |||
LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | LOG4CXX_CAST_ENTRY_CHAIN(BASE_CLASS) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
StringMatchFilter(); | StringMatchFilter(); | |||
/** | /** | |||
Set options | Set options | |||
*/ | */ | |||
virtual void setOption(const String& option, | virtual void setOption(const LogString& option, | |||
const String& value); | const LogString& value); | |||
inline void setStringToMatch(const String& stringToM | inline void setStringToMatch(const LogString& strin | |||
atch) | gToMatch1) | |||
{ this->stringToMatch = stringToMatch; } | { this->stringToMatch.assign(stringToMatch1 | |||
); } | ||||
inline const String& getStringToMatch() const | inline const LogString& getStringToMatch() const | |||
{ return stringToMatch; } | { return stringToMatch; } | |||
inline void setAcceptOnMatch(bool acceptOnMatch) | inline void setAcceptOnMatch(bool acceptOnMatch1) | |||
{ this->acceptOnMatch = acceptOnMatch; } | { this->acceptOnMatch = acceptOnMatch1; } | |||
inline bool getAcceptOnMatch() const | inline bool getAcceptOnMatch() const | |||
{ return acceptOnMatch; } | { return acceptOnMatch; } | |||
/** | /** | |||
Returns {@link spi::Filter#NEUTRAL NEUTRAL} | Returns {@link log4cxx::spi::Filter#NEUTRAL NEUTRAL | |||
is there is no string match. | } | |||
*/ | is there is no string match. | |||
FilterDecision decide(const spi::LoggingEventPtr& ev | */ | |||
ent) const; | FilterDecision decide(const spi::LoggingEventPtr& e | |||
}; // class StringMatchFilter | vent) const; | |||
} // namespace varia | }; // class StringMatchFilter | |||
}; // namespace log4cxx | LOG4CXX_PTR_DEF(StringMatchFilter); | |||
} // namespace filter | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_VARIA_STRING_MATCH_FILTER_H | #endif // _LOG4CXX_FILTER_STRING_MATCH_FILTER_H | |||
End of changes. 15 change blocks. | ||||
76 lines changed or deleted | 73 lines changed or added | |||
stringtokenizer.h | stringtokenizer.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_STRING_TOKENIZER_H | #ifndef _LOG4CXX_HELPERS_STRING_TOKENIZER_H | |||
#define _LOG4CXX_HELPERS_STRING_TOKENIZER_H | #define _LOG4CXX_HELPERS_STRING_TOKENIZER_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT NoSuchElementException : public Excepti | class LOG4CXX_EXPORT StringTokenizer | |||
on | { | |||
{ | public: | |||
}; | StringTokenizer(const LogString& str, const LogStri | |||
ng& delim); | ||||
~StringTokenizer(); | ||||
bool hasMoreTokens() const; | ||||
LogString nextToken(); | ||||
class LOG4CXX_EXPORT StringTokenizer | protected: | |||
{ | LogString src; | |||
public: | LogString delim; | |||
StringTokenizer(const String& str, const String& del | size_t pos; | |||
im); | ||||
~StringTokenizer(); | ||||
bool hasMoreTokens() const; | ||||
String nextToken(); | ||||
protected: | private: | |||
TCHAR * str; | // prevent copy and assignment statements | |||
String delim; | StringTokenizer(const StringTokenizer&); | |||
TCHAR * token; | StringTokenizer& operator=(const StringTokenizer&); | |||
TCHAR * state; | }; // class StringTokenizer | |||
}; // class StringTokenizer | } // namespace helpers; | |||
} // namespace helpers; | } // namespace log4cxx; | |||
}; // namespace log4cxx; | ||||
#endif //_LOG4CXX_HELPERS_STRING_TOKENIZER_H | #endif //_LOG4CXX_HELPERS_STRING_TOKENIZER_H | |||
End of changes. 5 change blocks. | ||||
28 lines changed or deleted | 28 lines changed or added | |||
syslogappender.h | syslogappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_SYSLOG_APPENDER_H | #ifndef _LOG4CXX_NET_SYSLOG_APPENDER_H | |||
#define _LOG4CXX_NET_SYSLOG_APPENDER_H | #define _LOG4CXX_NET_SYSLOG_APPENDER_H | |||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/syslogwriter.h> | #include <log4cxx/helpers/syslogwriter.h> | |||
#ifndef HAVE_SYSLOG | ||||
#endif | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace net | namespace net | |||
{ | { | |||
class SyslogAppender; | /** Use SyslogAppender to send log messages to a remote sys | |||
typedef helpers::ObjectPtrT<SyslogAppender> SyslogAppenderPt | log daemon.*/ | |||
r; | class LOG4CXX_EXPORT SyslogAppender : public AppenderSkelet | |||
on | ||||
/** Use SyslogAppender to send log messages to a remote sysl | { | |||
og daemon.*/ | public: | |||
class LOG4CXX_EXPORT SyslogAppender : public AppenderSkeleto | DECLARE_LOG4CXX_OBJECT(SyslogAppender) | |||
n | BEGIN_LOG4CXX_CAST_MAP() | |||
{ | LOG4CXX_CAST_ENTRY(SyslogAppender) | |||
public: | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
DECLARE_LOG4CXX_OBJECT(SyslogAppender) | END_LOG4CXX_CAST_MAP() | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(SyslogAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
SyslogAppender(); | SyslogAppender(); | |||
SyslogAppender(const LayoutPtr& layout, int syslogFa | SyslogAppender(const LayoutPtr& layout, int syslogF | |||
cility); | acility); | |||
SyslogAppender(const LayoutPtr& layout, | SyslogAppender(const LayoutPtr& layout, | |||
const String& syslogHost, int syslogFacility | const LogString& syslogHost, int syslogFaci | |||
); | lity); | |||
~SyslogAppender(); | ~SyslogAppender(); | |||
/** Release any resources held by this SyslogAppende | /** Release any resources held by this SyslogAppend | |||
r.*/ | er.*/ | |||
void close(); | void close(); | |||
/** | /** | |||
Returns the specified syslog facility as a lower-cas | Returns the specified syslog facility as a lower-ca | |||
e String, | se String, | |||
e.g. "kern", "user", etc. | e.g. "kern", "user", etc. | |||
*/ | */ | |||
static String getFacilityString(int syslogFacility); | static LogString getFacilityString(int syslogFacili | |||
ty); | ||||
/** | /** | |||
Returns the integer value corresponding to the named | Returns the integer value corresponding to the name | |||
syslog | d syslog | |||
facility, or -1 if it couldn't be recognized. | facility, or -1 if it couldn't be recognized. | |||
@param facilityName one of the strings KERN, USER, M | @param facilityName one of the strings KERN, USER, | |||
AIL, DAEMON, | MAIL, DAEMON, | |||
AUTH, SYSLOG, LPR, NEWS, UUCP, CRON, AUTHPRIV, FTP, | AUTH, SYSLOG, LPR, NEWS, UUCP, CRON, AUTHPRIV, FTP, | |||
LOCAL0, | LOCAL0, | |||
LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCA | LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOC | |||
L7. | AL7. | |||
The matching is case-insensitive. | The matching is case-insensitive. | |||
*/ | */ | |||
static int getFacility(const String &facilityName); | static int getFacility(const LogString &facilityNam | |||
e); | ||||
void append(const spi::LoggingEventPtr& event); | void append(const spi::LoggingEventPtr& event, log4 cxx::helpers::Pool& p); | |||
/** | /** | |||
This method returns immediately as options are activ | This method returns immediately as options are acti | |||
ated when they | vated when they | |||
are set. | are set. | |||
*/ | */ | |||
void activateOptions(); | void activateOptions(log4cxx::helpers::Pool& p); | |||
void setOption(const String& option, const String& v | void setOption(const LogString& option, const LogSt | |||
alue); | ring& value); | |||
/** | /** | |||
The SyslogAppender requires a layout. Hence, this me | The SyslogAppender requires a layout. Hence, this m | |||
thod returns | ethod returns | |||
<code>true</code>. | <code>true</code>. | |||
*/ | */ | |||
virtual bool requiresLayout() const | virtual bool requiresLayout() const | |||
{ return true; } | { return true; } | |||
/** | /** | |||
The <b>SyslogHost</b> option is the name of the the | The <b>SyslogHost</b> option is the name of the the | |||
syslog host | syslog host | |||
where log output should go. | where log output should go. | |||
<b>WARNING</b> If the SyslogHost is not set, then th | <b>WARNING</b> If the SyslogHost is not set, then t | |||
is appender | his appender | |||
will fail. | will fail. | |||
*/ | */ | |||
void setSyslogHost(const String& syslogHost); | void setSyslogHost(const LogString& syslogHost); | |||
/** | /** | |||
Returns the value of the <b>SyslogHost</b> option. | Returns the value of the <b>SyslogHost</b> option. | |||
*/ | */ | |||
inline const String& getSyslogHost() const | inline const LogString& getSyslogHost() const | |||
{ return syslogHost; } | { return syslogHost; } | |||
/** | /** | |||
Set the syslog facility. This is the <b>Facility</b> | Set the syslog facility. This is the <b>Facility</b | |||
option. | > option. | |||
<p>The <code>facilityName</code> parameter must be o | <p>The <code>facilityName</code> parameter must be | |||
ne of the | one of the | |||
strings KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR, | strings KERN, USER, MAIL, DAEMON, AUTH, SYSLOG, LPR | |||
NEWS, UUCP, | , NEWS, UUCP, | |||
CRON, AUTHPRIV, FTP, LOCAL0, LOCAL1, LOCAL2, LOCAL3, | CRON, AUTHPRIV, FTP, LOCAL0, LOCAL1, LOCAL2, LOCAL3 | |||
LOCAL4, | , LOCAL4, | |||
LOCAL5, LOCAL6, LOCAL7. Case is unimportant. | LOCAL5, LOCAL6, LOCAL7. Case is unimportant. | |||
*/ | */ | |||
void setFacility(const String& facilityName); | void setFacility(const LogString& facilityName); | |||
/** | /** | |||
Returns the value of the <b>Facility</b> option. | Returns the value of the <b>Facility</b> option. | |||
*/ | */ | |||
inline String getFacility() const | inline LogString getFacility() const | |||
{ return getFacilityString(syslogFacility); | { return getFacilityString(syslogFacility); | |||
} | } | |||
/** | /** | |||
If the <b>FacilityPrinting</b> option is set to true | If the <b>FacilityPrinting</b> option is set to tru | |||
, the printed | e, the printed | |||
message will include the facility name of the applic | message will include the facility name of the appli | |||
ation. It is | cation. It is | |||
<em>false</em> by default. | <em>false</em> by default. | |||
*/ | */ | |||
inline void setFacilityPrinting(bool facilityPrintin | inline void setFacilityPrinting(bool facilityPrinti | |||
g) | ng1) | |||
{ this->facilityPrinting = facilityPrinting; | { this->facilityPrinting = facilityPrinting | |||
} | 1; } | |||
/** | /** | |||
Returns the value of the <b>FacilityPrinting</b> opt | Returns the value of the <b>FacilityPrinting</b> op | |||
ion. | tion. | |||
*/ | */ | |||
inline bool getFacilityPrinting() const | inline bool getFacilityPrinting() const | |||
{ return facilityPrinting; } | { return facilityPrinting; } | |||
protected: | protected: | |||
void initSyslogFacilityStr(); | void initSyslogFacilityStr(); | |||
int syslogFacility; // Have LOG_USER as default | int syslogFacility; // Have LOG_USER as default | |||
String facilityStr; | LogString facilityStr; | |||
bool facilityPrinting; | bool facilityPrinting; | |||
helpers::SyslogWriter * sw; | helpers::SyslogWriter * sw; | |||
String syslogHost; | LogString syslogHost; | |||
}; // class SyslogAppender | private: | |||
SyslogAppender(const SyslogAppender&); | ||||
SyslogAppender& operator=(const SyslogAppender&); | ||||
}; // class SyslogAppender | ||||
LOG4CXX_PTR_DEF(SyslogAppender); | ||||
} // namespace net | } // namespace net | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif // _LOG4CXX_NET_SYSLOG_APPENDER_H | #endif // _LOG4CXX_NET_SYSLOG_APPENDER_H | |||
End of changes. 19 change blocks. | ||||
128 lines changed or deleted | 128 lines changed or added | |||
syslogwriter.h | syslogwriter.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SYSLOG_WRITER_H | ||||
#define _LOG4CXX_SYSLOG_WRITER_H | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/inetaddress.h> | #include <log4cxx/helpers/inetaddress.h> | |||
#include <log4cxx/helpers/datagramsocket.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class DatagramSocket; | /** | |||
typedef helpers::ObjectPtrT<DatagramSocket> DatagramSocketPt | SyslogWriter is a wrapper around the DatagramSocket class | |||
r; | it writes text to the specified host on the port 514 (UNIX | |||
syslog) | ||||
*/ | ||||
class LOG4CXX_EXPORT SyslogWriter | ||||
{ | ||||
public: | ||||
SyslogWriter(const LogString& syslogHost); | ||||
void write(const LogString& string); | ||||
/** | private: | |||
SyslogWriter is a wrapper around the DatagramSocket class | LogString syslogHost; | |||
it writes text to the specified host on the port 514 (UNIX s | InetAddressPtr address; | |||
yslog) | DatagramSocketPtr ds; | |||
*/ | }; | |||
class LOG4CXX_EXPORT SyslogWriter | } // namespace helpers | |||
{ | } // namespace log4cxx | |||
public: | ||||
SyslogWriter(const String& syslogHost); | ||||
void write(const String& string); | ||||
private: | #endif | |||
String syslogHost; | ||||
InetAddress address; | ||||
DatagramSocketPtr ds; | ||||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
End of changes. 6 change blocks. | ||||
20 lines changed or deleted | 29 lines changed or added | |||
system.h | system.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_SYSTEM_H | #ifndef _LOG4CXX_HELPERS_SYSTEM_H | |||
#define _LOG4CXX_HELPERS_SYSTEM_H | #define _LOG4CXX_HELPERS_SYSTEM_H | |||
#include <log4cxx/config.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/helpers/exception.h> | |||
#include <log4cxx/helpers/exception.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class Properties; | class Properties; | |||
/** The System class contains several useful class fields an | ||||
d methods. | ||||
It cannot be instantiated. | ||||
*/ | ||||
class LOG4CXX_EXPORT System | ||||
{ | ||||
public: | ||||
/** Returns the current time in milliseconds since midnight | ||||
(0 hour), | ||||
January 1, 1970. | ||||
Returns the current time in milliseconds. Note that while th | ||||
e unit of | ||||
time of the return value is a millisecond, the granularity o | ||||
f the value | ||||
depends on the underlying operating system and may be larger | ||||
. For | ||||
example, many operating systems measure time in units of ten | ||||
s of | ||||
milliseconds. | ||||
@return the difference, measured in milliseconds, between th | ||||
e current | ||||
time and midnight, January 1, 1970 UTC. | ||||
*/ | ||||
static int64_t currentTimeMillis(); | ||||
/** | ||||
Gets the system property indicated by the specified key. | ||||
@param key the name of the system property. | ||||
@return the string value of the system property, or the defa | /** The System class contains several useful class fields a | |||
ult value if | nd methods. | |||
there is no property with that key. | It cannot be instantiated. | |||
*/ | ||||
class LOG4CXX_EXPORT System | ||||
{ | ||||
public: | ||||
@throws IllegalArgumentException if key is empty. | /** | |||
*/ | Gets the system property indicated by the specified key. | |||
static String getProperty(const String& key); | ||||
/** | @param key the name of the system property. | |||
Sets the system property indicated by the specified key. | ||||
@param key the name of the system property. | @return the string value of the system property, or the def | |||
@param value the value of the system property. | ault value if | |||
there is no property with that key. | ||||
@throws IllegalArgumentException if key is empty. | @throws IllegalArgumentException if key is empty. | |||
*/ | */ | |||
static void setProperty(const String& key, const String& val | static LogString getProperty(const LogString& key); | |||
ue); | ||||
static void setProperties(const Properties& props); | }; | |||
}; | } // namespace helpers | |||
} // namespace helpers | } // namespace log4cxx | |||
}; // namespace log4cxx | ||||
#endif //_LOG4CXX_HELPERS_SYSTEM_H | #endif //_LOG4CXX_HELPERS_SYSTEM_H | |||
End of changes. 9 change blocks. | ||||
61 lines changed or deleted | 30 lines changed or added | |||
tchar.h | tchar.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_TCHAR_H | #ifndef _LOG4CXX_HELPERS_TCHAR_H | |||
#define _LOG4CXX_HELPERS_TCHAR_H | #define _LOG4CXX_HELPERS_TCHAR_H | |||
#include <log4cxx/config.h> | #error log4cxx/helpers/tchar.h is obsolete, see details following this line | |||
#include <string> | . | |||
#include <iostream> | ||||
#include <sstream> | ||||
#include <cwchar> | ||||
#include <algorithm> // min & max | ||||
#include <stdio.h> // sprintf | ||||
#include <streambuf> // basic_streambuf | ||||
#include <log4cxx/helpers/strictmath.h> | ||||
class Convert | ||||
{ | ||||
public: | ||||
static wchar_t * ansiToUnicode(wchar_t * dst, const char * src) | ||||
{ | ||||
::mbstowcs(dst, src, 512); | ||||
return dst; | ||||
} | ||||
static char * unicodeToAnsi(char * dst, const wchar_t * src) | ||||
{ | ||||
::wcstombs(dst, src, 512); | ||||
return dst; | ||||
} | ||||
static void int64ToString(wchar_t * dst, size_t maxlen, const int64_ | ||||
t& ll) | ||||
{ | ||||
#ifdef WIN32 | ||||
_snwprintf(dst, maxlen, L"%I64d", ll); | ||||
#else | ||||
swprintf(dst, maxlen, L"%lld", ll); | ||||
#endif | ||||
} | ||||
static void int64ToString(char * dst, size_t maxlen, const int64_t& | ||||
ll) | ||||
{ | ||||
#ifdef WIN32 | ||||
_snprintf(dst, maxlen, "%I64d", ll); | ||||
#else | ||||
snprintf(dst, maxlen, "%lld", ll); | ||||
#endif | ||||
} | ||||
}; | ||||
namespace std | ||||
{ | ||||
template<typename _CharT, typename _Traits> | ||||
basic_ostream<_CharT, _Traits>& | ||||
operator<<(basic_ostream<_CharT, _Traits>& os, const int64_t | ||||
& ll) | ||||
{ | ||||
_CharT buff[21]; | ||||
Convert::int64ToString(buff, 20, ll); | ||||
os << buff; | ||||
return os; | ||||
} | ||||
} | ||||
#ifdef MUST_UNDEF_T | ||||
#undef _T | ||||
#endif | ||||
#ifdef WIN32 | ||||
#ifndef USES_CONVERSION | ||||
#include <malloc.h> | ||||
#define USES_CONVERSION void * _dst = _alloca(1024); | ||||
#endif | ||||
#else | ||||
#include <alloca.h> | ||||
#define USES_CONVERSION void * _dst = alloca(1024); | ||||
#endif | ||||
#ifndef W2A | ||||
#define W2A(src) Convert::unicodeToAnsi((char *)_dst, src) | ||||
#endif | ||||
#ifndef A2W | ||||
#define A2W(src) Convert::ansiToUnicode((wchar_t *)_dst, src) | ||||
#endif | ||||
#ifdef UNICODE | ||||
#include <wctype.h> | ||||
#ifndef _T | ||||
#define _T(x) L ## x | ||||
#endif | ||||
#ifndef TCHAR | ||||
typedef wchar_t TCHAR; | ||||
#endif | ||||
#define totupper towupper | ||||
#define totlower towlower | ||||
#define tcout std::wcout | ||||
#define tcerr std::wcerr | ||||
#ifdef WIN32 | ||||
#define tstrncasecmp _wcsnicmp | ||||
#else | ||||
#define tstrncasecmp wcsncasecmp | ||||
#endif // WIN32 | ||||
#ifndef T2A | ||||
#define T2A(src) W2A(src) | ||||
#endif | ||||
#ifndef T2W | ||||
#define T2W(src) src | ||||
#endif | ||||
#ifndef A2T | ||||
#define A2T(src) A2W(src) | ||||
#endif | ||||
#ifndef W2T | ||||
#define W2T(src) src | ||||
#endif | ||||
#define ttol(s) wcstol(s, 0, 10) | ||||
#define itot _itow | ||||
#define tcscmp wcscmp | ||||
#else // Not UNICODE | ||||
#include <ctype.h> | ||||
#ifndef _T | ||||
#define _T(x) x | ||||
#endif | ||||
typedef char TCHAR; | ||||
#define totupper toupper | ||||
#define totlower tolower | ||||
#define tcout std::cout | ||||
#define tcerr std::cerr | ||||
#ifdef WIN32 | ||||
#define tstrncasecmp _strnicmp | ||||
#else | ||||
#define tstrncasecmp strncasecmp | ||||
#endif // WIN32 | ||||
#ifndef T2A | ||||
#define T2A(src) src | ||||
#endif | ||||
#ifndef T2W | ||||
#define T2W(src) A2W(src) | ||||
#endif | ||||
#ifndef A2T | ||||
#define A2T(src) src | ||||
#endif | ||||
#ifndef W2T | ||||
#define W2T(src) W2A(src) | ||||
#endif | ||||
#define ttol atol | ||||
#define itot itoa | ||||
#define tcscmp strcmp | ||||
#endif // UNICODE | ||||
#define _MinInc size_t(512) | ||||
#define _MaxInc size_t(100 * 1024) | ||||
namespace log4cxx | ||||
{ | ||||
class stringbuf : public std::basic_streambuf<TCHAR> | ||||
{ | ||||
public: | ||||
typedef std::basic_streambuf<TCHAR> base; | ||||
typedef base::char_type char_type; | ||||
typedef base::traits_type traits_type; | ||||
typedef std::allocator<char_type> allocator_type; | ||||
typedef traits_type::int_type int_type; | ||||
~stringbuf() | ||||
{ | ||||
char_type * b = pbase(); | ||||
if (b) | ||||
{ | ||||
al.deallocate(b, epptr() - b); | ||||
} | ||||
} | ||||
virtual int_type overflow( | ||||
int_type c = stringbuf::traits_type::eof()) | ||||
{ | ||||
using namespace std; | ||||
if (traits_type::eq_int_type(traits_type::eof(), c)) | ||||
{ | ||||
return traits_type::not_eof(c); | ||||
} | ||||
char_type *b = pbase(); | ||||
if (b == 0) | ||||
{ | ||||
char_type * p = (char_type *)al.allocate(_Mi | ||||
nInc, 0); | ||||
setp(p, p + _MinInc); | ||||
} | ||||
else | ||||
{ | ||||
size_t os = epptr() - b; // taille allou | ||||
size_t is = | ||||
helpers::StrictMath::maximum( | ||||
helpers::StrictMath::minimum( | ||||
(os * 2), _MaxInc),_MinInc) | ||||
+ 1; // incr | ||||
char_type *p = (char_type *)al.allocate(os + | ||||
is, 0); | ||||
traits_type::copy(p, b, os); | ||||
al.deallocate(b, epptr() - b); | ||||
setp(p, p + os + is); | ||||
pbump((int)os); | ||||
} | ||||
*pptr() = c; | ||||
pbump(1); | ||||
return traits_type::not_eof(c); | ||||
} | ||||
std::basic_string<char_type> str() const | ||||
{ | ||||
return std::basic_string<char_type>(pbase(), pptr() | ||||
- pbase()); | ||||
} | ||||
void str(const std::basic_string<char_type>& s) | ||||
{ | ||||
setp(pbase(), epptr()); | ||||
} | ||||
virtual pos_type seekoff(off_type off, std::ios_base::seekdi | ||||
r way, | ||||
std::ios_base::openmode mode = std::ios_base::in | s | ||||
td::ios_base::out) | ||||
{ | ||||
pos_type ret = pos_type(off_type(-1)); | ||||
if (mode == std::ios_base::out) | ||||
{ | ||||
if (way == std::ios_base::beg) | ||||
{ | ||||
setp(pbase(), epptr()); | ||||
ret = pos_type(off); | ||||
pbump(off); | ||||
} | ||||
else if (way == std::ios_base::end) | ||||
{ | ||||
setp(pbase(), epptr()); | ||||
ret = pos_type(off + epptr() - pbase | ||||
()); | ||||
pbump(off + epptr() - pbase()); | ||||
} | ||||
else if (way == std::ios_base::cur) | ||||
{ | ||||
pbump(off); | ||||
ret = pos_type(pptr() - pbase()); | ||||
} | ||||
} | ||||
return ret; | ||||
} | ||||
virtual pos_type seekpos(pos_type pos, | ||||
std::ios_base::openmode mode = std::ios_base::in | s | ||||
td::ios_base::out) | ||||
{ | ||||
std::streamoff off = (std::streamoff)pos; | ||||
if (pbase() + off > epptr()) | ||||
{ | ||||
return pos_type(-1); | ||||
} | ||||
else | ||||
{ | ||||
setp(pbase(), epptr()); | ||||
pbump(off); | ||||
return pos; | ||||
} | ||||
} | ||||
protected: | ||||
allocator_type al; | ||||
}; | ||||
class StringBuffer : public std::basic_ostream<TCHAR> | ||||
{ | ||||
public: | ||||
StringBuffer() : std::basic_ostream<TCHAR>(0) | ||||
{ this->init(&buffer); } | ||||
inline std::basic_string<TCHAR> str() const | ||||
{ return buffer.str(); } | ||||
inline void str(const std::basic_string<TCHAR>& s) | ||||
{ buffer.str(s); } | ||||
protected: | ||||
stringbuf buffer; | ||||
}; | ||||
typedef std::basic_string<TCHAR> String; | /** | |||
typedef std::basic_ostream<TCHAR> ostream; | * A short history of log4cxx's tchar.h | |||
typedef std::basic_istream<TCHAR> istream; | * | |||
} | * The previous log4cxx/helpers/tchar.h contained macros that | |||
* attempted to replicate macros and functions defined by | ||||
* the Microsoft SDK's tchar.h and related header files | ||||
* such as _T() and TCHAR. | ||||
* | ||||
* When building apps using both log4cxx and Microsoft SDK's tchar.h, | ||||
* these definitions could conflict and, for example, the code generated | ||||
* by _T("Foo") would depend on the include order of the two | ||||
* tchar.h's. | ||||
* | ||||
* The motivation of tchar.h in the Microsoft SDK was to | ||||
* support presenting either a wide-char or multi-byte char | ||||
* facade to a C API depending on the presence of | ||||
* the _UNICODE or _MBCS preprocessor macros. When _UNICODE | ||||
* was set then tchar was typedef'd as wchar_t and, for example, | ||||
* the CreateProcess macro was defined to be CreateProcessW, If | ||||
* _MBCS was defined, then tchar was typedef'd as char | ||||
* and CreateProcess macro was defined to be CreateProcessA. | ||||
* | ||||
* In either case, the setting of _UNICODE or _MBCS | ||||
* didn't affect the implementation of the operating system. | ||||
* If you were running the Windows NT family, all the multi-byte | ||||
* methods delegated to a wide-char implementation. | ||||
* In the Windows 9x family, most wide-char methods delegated | ||||
* to a multi-byte implementation. | ||||
* | ||||
* In practice, most Microsoft Windows executables were either | ||||
* wide-char or multi-byte centric. However, they did not | ||||
* have to be exclusively so. An application built with | ||||
* _UNICODE, could still call multi-byte API functions, | ||||
* they would just need to explicitly call CreateProcessA | ||||
* instead of using the facade macro. An executable could | ||||
* also use both a multi-byte centric and wide-char centric | ||||
* DLL's since all the calls eventually hit the same | ||||
* underlying implementation be it a wide-char on in | ||||
* Windows NT or multi-char in Windows 9x. | ||||
* | ||||
* The use of log4cxx/helpers/tchar.h in log4cxx 0.9.7 was | ||||
* undesirable because it made log4cxx either exclusively | ||||
* wide-char or exclusively multi-byte and had to be consistant | ||||
* with the character model of the calling executable. | ||||
* This would make it extremely difficult to use | ||||
* log4cxx when DLL's with different character models | ||||
* where called by the same application. Since log4cxx | ||||
* was C++, not C, function overloading could be | ||||
* used instead of the CreateProcess et al macros | ||||
* used in the Windows headers. | ||||
* | ||||
* In the rework before the 0.9.8, the following changes | ||||
* were made to log4cxx: | ||||
* | ||||
* 1. All inclusions of log4cxx/helpers/tchar.h | ||||
* and use of TCHAR, log4cxx::String and _T | ||||
* were removed from log4cxx. | ||||
* 2. log4cxx/logstring.h was added to define the | ||||
* implementation character model using the log4cxx::logchar | ||||
* and log4cxx::LogString typedefs and LOG4CXX_STR macro. | ||||
* 3. Methods commonly used by calling applications were defined | ||||
* in both wide-char and multi-byte and both pointer and string | ||||
* forms with conversion to the implementation character | ||||
* model delayed as long as possible. | ||||
* 4. Use of Standard Template Library streams within | ||||
* log4cxx was substantially reduced (but not totally | ||||
* elminated). | ||||
* 5. The LOG4CXX_DEBUG and similar macros were simplified | ||||
* and now only take arguments that evaluate to | ||||
* character pointers or strings and no longer take | ||||
* the right hand side of an insertion operation: | ||||
* | ||||
* // This used to work, but no longer | ||||
* LOG4CXX_DEBUG(logger, "foo" << i); | ||||
* | ||||
* If you extensively used this idiom, please consider | ||||
* migrating to stream-like API defined in log4cxx/stream.h. | ||||
* | ||||
* 6. The LOG4CXX_DEBUG and similar use the LOG4CXX_LOCATION | ||||
* macro to define the log statement location instead of | ||||
* using __FILE__ and __LINE__. Logger::debug and | ||||
* similar now take const LocationInfo& instead of | ||||
* separate const char* and int arguments. This allows | ||||
* class and method names to appear in location info. | ||||
* 7. log4cxx include files no longer include config.h | ||||
* or related files. config.h and related files | ||||
* may be used by log4cxx implementation, but have | ||||
* no effect on the exposed API. | ||||
* | ||||
* It is expected that the default implementation character | ||||
* model will be wchar_t. However this may vary by platform | ||||
* and may be changed based on feedback. | ||||
* | ||||
* Developers using log4cxx should seldom be concerned | ||||
* with the internal character model of log4cxx unless | ||||
* writing custom appenders or layouts. An application | ||||
* should not be using log4cxx::logchar, log4cxx::LogString | ||||
* or LOG4CXX_STR unless dealing with something that is | ||||
* clearly a log4cxx internal. If you find something | ||||
* defined as using or returning LogString that you | ||||
* don't consider a log4cxx internal, please file a | ||||
* bug report or post a message to one of the mailing lists. | ||||
* | ||||
* wchar_t literals should be preferred in log requests since | ||||
* since they eliminate potential encoding confusion | ||||
* when the development and deployment encodings are different. | ||||
* | ||||
* Migration strategies: | ||||
* | ||||
* If you followed the examples in the previous log4cxx versions, | ||||
* you may have _T() macros littered through your code | ||||
* and inclusions of this file. If you are on the Microsoft | ||||
* platform, the simplest solution is to just include | ||||
* the Platform SDK's tchar.h which would result your log | ||||
* statements matching the character model of your application. | ||||
* | ||||
* If you targetting another platform and your only use of | ||||
* _T() in related to log4cxx, then I would recommend replacing | ||||
* all _T() with another macro (say MYAPP_LOGSTR()) | ||||
* and defining that macro in a commonly included header file | ||||
* or defining _T() in a commonly included header file. | ||||
* | ||||
* I would first try defining these macros as | ||||
* | ||||
* #define _T(str) L ## str | ||||
* | ||||
* If that results in too many compilation errors, then try: | ||||
* | ||||
* #define _T(str) str | ||||
* | ||||
* Using the first form will result in wchar_t literals which | ||||
* will avoid potential encoding confusion and is expected | ||||
* to result in slightly better performance when logging. | ||||
* | ||||
* Since the best choice for _T() depends on the application, | ||||
* there is not a definition within log4cxx. | ||||
* | ||||
* Use encoding conversion macros A2T, W2T, et al should | ||||
* not longer be necessary. If you are doing a lot of | ||||
* work converting between encodings, you might consider | ||||
* using the stream-like interface in log4cxx/stream.h | ||||
* which defines insertion operators for multi-byte | ||||
* strings in addition to exposing all the | ||||
* insertion operations defined for | ||||
* std::basic_ostream<wchar_t>. | ||||
* | ||||
*/ | ||||
#endif //_LOG4CXX_HELPERS_TCHAR_H | #endif //_LOG4CXX_HELPERS_TCHAR_H | |||
End of changes. 3 change blocks. | ||||
308 lines changed or deleted | 155 lines changed or added | |||
telnetappender.h | telnetappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_TELNET_APPENDER_H | #ifndef _LOG4CXX_NET_TELNET_APPENDER_H | |||
#define _LOG4CXX_NET_TELNET_APPENDER_H | #define _LOG4CXX_NET_TELNET_APPENDER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/socket.h> | #include <log4cxx/helpers/socket.h> | |||
#include <log4cxx/helpers/serversocket.h> | #include <log4cxx/helpers/serversocket.h> | |||
#include <log4cxx/helpers/thread.h> | #include <log4cxx/helpers/thread.h> | |||
#include <vector> | #include <vector> | |||
#include <log4cxx/helpers/charsetencoder.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers { | |||
{ | class ByteBuffer; | |||
class SocketOutputStream; | } | |||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | namespace net | |||
StreamPtr; | { | |||
} | ||||
namespace net | ||||
{ | ||||
/** | /** | |||
<p>The TelnetAppender is a log4cxx appender that specializes in | <p>The TelnetAppender is a log4cxx appender that specializes in | |||
writing to a read-only socket. The output is provided in a | writing to a read-only socket. The output is provided in a | |||
telnet-friendly way so that a log can be monitored over TCP/IP. | telnet-friendly way so that a log can be monitored over TCP/IP. | |||
Clients using telnet connect to the socket and receive log data. | Clients using telnet connect to the socket and receive log data. | |||
This is handy for remote monitoring, especially when monitoring a | This is handy for remote monitoring, especially when monitoring a | |||
servlet. | servlet. | |||
<p>Here is a list of the available configuration options: | <p>Here is a list of the available configuration options: | |||
skipping to change at line 62 | skipping to change at line 66 | |||
</tr> | </tr> | |||
<tr> | <tr> | |||
<td>Port</td> | <td>Port</td> | |||
<td>optional</td> | <td>optional</td> | |||
<td>This parameter determines the port to use for announcing log events. T he default port is 23 (telnet).</td> | <td>This parameter determines the port to use for announcing log events. T he default port is 23 (telnet).</td> | |||
<td>5875</td> | <td>5875</td> | |||
</table> | </table> | |||
*/ | */ | |||
class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton | class LOG4CXX_EXPORT TelnetAppender : public AppenderSkeleton | |||
{ | { | |||
class SocketHandler; | class SocketHandler; | |||
friend class SocketHandler; | friend class SocketHandler; | |||
private: | private: | |||
static int DEFAULT_PORT; | static const int DEFAULT_PORT; | |||
SocketHandler * sh; | static const int MAX_CONNECTIONS; | |||
int port; | int port; | |||
public: | ||||
DECLARE_LOG4CXX_OBJECT(TelnetAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(TelnetAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
TelnetAppender(); | public: | |||
~TelnetAppender(); | DECLARE_LOG4CXX_OBJECT(TelnetAppender) | |||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(TelnetAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** | TelnetAppender(); | |||
This appender requires a layout to format the text t | ~TelnetAppender(); | |||
o the | ||||
attached client(s). */ | ||||
virtual bool requiresLayout() const | ||||
{ return true; } | ||||
/** all of the options have been set, create the soc | /** | |||
ket handler and | This appender requires a layout to format the text | |||
wait for connections. */ | to the | |||
void activateOptions(); | attached client(s). */ | |||
virtual bool requiresLayout() const | ||||
{ return true; } | ||||
/** | LogString getEncoding() const; | |||
Set options | void setEncoding(const LogString& value); | |||
*/ | ||||
virtual void setOption(const String& option, const S | ||||
tring& value); | ||||
/** | /** all of the options have been set, create the so | |||
Returns value of the <b>Port</b> option. | cket handler and | |||
*/ | wait for connections. */ | |||
int getPort() const | void activateOptions(log4cxx::helpers::Pool& p); | |||
{ return port; } | ||||
/** | /** | |||
The <b>Port</b> option takes a positive integer representing | Set options | |||
the port where the server is waiting for connections. | */ | |||
*/ | virtual void setOption(const LogString& option, con | |||
void setPort(int port) | st LogString& value); | |||
{ this->port = port; } | ||||
/** shuts down the appender. */ | /** | |||
void close(); | Returns value of the <b>Por | |||
t</b> option. | ||||
*/ | ||||
int getPort() const | ||||
{ return port; } | ||||
protected: | /** | |||
/** Handles a log event. For this appender, that me | The <b>Port</b> option take | |||
ans writing the | s a positive integer representing | |||
message to each connected client. */ | the port where the server i | |||
virtual void append(const spi::LoggingEventPtr& even | s waiting for connections. | |||
t) ; | */ | |||
void setPort(int port1) | ||||
{ this->port = port1; } | ||||
//-------------------------------------------------- | /** shuts down the appender. */ | |||
-------- SocketHandler: | void close(); | |||
private: | protected: | |||
/** The SocketHandler class is used to accept connec | /** Handles a log event. For this appender, that m | |||
tions from | eans writing the | |||
clients. It is threaded so that clients can connect | message to each connected client. */ | |||
/disconnect | virtual void append(const spi::LoggingEventPtr& eve | |||
asynchronously. */ | nt, log4cxx::helpers::Pool& p) ; | |||
class LOG4CXX_EXPORT SocketHandler : public helpers: | ||||
:Thread | ||||
{ | ||||
private: | ||||
bool done; | ||||
std::vector<helpers::SocketOutputStreamPtr> | ||||
writers; | ||||
std::vector<helpers::SocketPtr> connections; | ||||
helpers::ServerSocket serverSocket; | ||||
std::vector<helpers::SocketPtr>::size_type M | ||||
AX_CONNECTIONS; | ||||
public: | //------------------------------------------------- | |||
SocketHandler(int port); | --------- SocketHandler: | |||
/** make sure we close all network connectio | private: | |||
ns when this handler | // prevent copy and assignment statements | |||
is destroyed. */ | TelnetAppender(const TelnetAppender&); | |||
void finalize(); | TelnetAppender& operator=(const TelnetAppender&); | |||
/** sends a message to each of the clients i | typedef log4cxx::helpers::SocketPtr Connection; | |||
n telnet-friendly output. */ | LOG4CXX_LIST_DEF(ConnectionList, Connection); | |||
void send(const String& message); | ||||
/** | void write(log4cxx::helpers::ByteBuffer&); | |||
Continually accepts client connections. Cli | void writeStatus(const log4cxx::helpers::SocketPtr& | |||
ent connections | socket, const LogString& msg, log4cxx::helpers::Pool& p); | |||
are refused when MAX_CONNECTIONS is reached. | ConnectionList connections; | |||
*/ | LogString encoding; | |||
virtual void run(); | log4cxx::helpers::CharsetEncoderPtr encoder; | |||
helpers::ServerSocket* serverSocket; | ||||
helpers::Thread sh; | ||||
size_t activeConnections; | ||||
static void* LOG4CXX_THREAD_FUNC acceptConnections( | ||||
apr_thread_t* thread, void* data); | ||||
}; // class TelnetAppender | ||||
protected: | LOG4CXX_PTR_DEF(TelnetAppender); | |||
void print(helpers::SocketOutputStreamPtr& o | ||||
s, const String& sz); | ||||
}; // class SocketHandler | ||||
}; // class TelnetAppender | ||||
} // namespace net | } // namespace net | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif // _LOG4CXX_NET_TELNET_APPENDER_H | #endif // _LOG4CXX_NET_TELNET_APPENDER_H | |||
End of changes. 21 change blocks. | ||||
104 lines changed or deleted | 97 lines changed or added | |||
thread.h | thread.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_THREAD_H | #ifndef _LOG4CXX_HELPERS_THREAD_H | |||
#define _LOG4CXX_HELPERS_THREAD_H | #define _LOG4CXX_HELPERS_THREAD_H | |||
#include <log4cxx/config.h> | #include <log4cxx/log4cxx.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/pool.h> | |||
#include <log4cxx/helpers/objectptr.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | ||||
#include <log4cxx/helpers/exception.h> | ||||
#include <log4cxx/mdc.h> | ||||
// Windows specific : | #if !defined(LOG4CXX_THREAD_FUNC) | |||
// winspool.h defines MIN_PRIORITY and MAX_PRIORITY | #if defined(_WIN32) | |||
#ifdef MIN_PRIORITY | #define LOG4CXX_THREAD_FUNC __stdcall | |||
#define OLD_MIN_PRIORITY MIN_PRIORITY | #else | |||
#undef MIN_PRIORITY | #define LOG4CXX_THREAD_FUNC | |||
#endif | #endif | |||
#ifdef MAX_PRIORITY | ||||
#define OLD_MAX_PRIORITY MAX_PRIORITY | ||||
#undef MAX_PRIORITY | ||||
#endif | #endif | |||
extern "C" { | ||||
typedef struct apr_thread_t apr_thread_t; | ||||
} | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT ThreadException : public Exception | class Pool; | |||
{ | class ThreadLocal; | |||
}; | ||||
class LOG4CXX_EXPORT InterruptedException : public Exception | ||||
{ | ||||
}; | ||||
/** The Runnable interface should be implemented by any clas | ||||
s whose | ||||
instances are intended to be executed by a thread. | ||||
The class must define a method of no arguments called run. | ||||
*/ | ||||
class LOG4CXX_EXPORT Runnable : public virtual Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Runnable) | ||||
/** When an object implementing interface Runnable i | ||||
s used to | ||||
create a thread, starting the thread causes the obje | ||||
ct's run | ||||
method to be called in that separately executing thr | ||||
ead. | ||||
*/ | ||||
virtual void run() = 0; | ||||
}; | ||||
typedef ObjectPtrT<Runnable> RunnablePtr; | ||||
/** A thread is a thread of execution in a program. | ||||
*/ | ||||
class LOG4CXX_EXPORT Thread : public virtual ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(Thread) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(Thread) | ||||
END_LOG4CXX_CAST_MAP() | ||||
/** Allocates a new Thread object.*/ | ||||
Thread(); | ||||
/** Allocates a new Thread object.*/ | ||||
Thread(RunnablePtr runnable); | ||||
virtual ~Thread(); | ||||
/** Returns the current thread identifier | ||||
*/ | ||||
static unsigned long getCurrentThreadId(); | ||||
/** Causes the currently executing thread to sleep ( | ||||
temporarily | ||||
cease execution) for the specified number of millise | ||||
conds. | ||||
*/ | ||||
static void sleep(long millis); | ||||
/** Causes this thread to begin execution; | ||||
calls the run method of this thread. | ||||
*/ | ||||
void start(); | ||||
/** If this thread was constructed using a separate | typedef void* (LOG4CXX_THREAD_FUNC *Runnable)(apr_thread_t* thr | |||
Runnable | ead, void* data); | |||
run object, then that Runnable object's run method i | /** | |||
s called; | * This class implements an approximation of java.util.Thr | |||
otherwise, this method does nothing and returns. | ead. | |||
*/ | */ | |||
virtual void run(); | class LOG4CXX_EXPORT Thread | |||
{ | ||||
public: | ||||
/** | ||||
* Create new instance. | ||||
*/ | ||||
Thread(); | ||||
/** | ||||
* Destructor. | ||||
*/ | ||||
~Thread(); | ||||
/** Waits for this thread to die. | /** | |||
*/ | * Runs the specified method on a newly created th | |||
void join(); | read. | |||
*/ | ||||
void run(Runnable start, void* data); | ||||
void join(); | ||||
enum | inline bool isActive() { return thread != 0; } | |||
{ | ||||
MIN_PRIORITY = 1, | ||||
NORM_PRIORITY = 2, | ||||
MAX_PRIORITY = 3 | ||||
}; | ||||
/** Changes the priority of this thread. | /** | |||
*/ | * Causes the currently executing thread to sleep f | |||
void setPriority(int newPriority); | or the | |||
* specified number of milliseconds. | ||||
* @param millis milliseconds. | ||||
* @throws Interrupted Exception if the thread is i | ||||
nterrupted. | ||||
*/ | ||||
static void sleep(int millis); | ||||
/** | ||||
* Sets interrupted status for current thread to t | ||||
rue. | ||||
*/ | ||||
static void currentThreadInterrupt(); | ||||
/** | ||||
* Sets interrupted status to true. | ||||
*/ | ||||
void interrupt(); | ||||
/** | ||||
* Tests if the current thread has been interrupte | ||||
d and | ||||
* sets the interrupted status to false. | ||||
*/ | ||||
static bool interrupted(); | ||||
/** | bool isAlive(); | |||
Atomic increment | bool isCurrentThread() const; | |||
*/ | void ending(); | |||
static long InterlockedIncrement(volatile long * val | ||||
); | ||||
/** | private: | |||
Atomic decrement | Pool p; | |||
*/ | apr_thread_t* thread; | |||
static long InterlockedDecrement(volatile long * val | volatile unsigned int alive; | |||
); | volatile unsigned int interruptedStatus; | |||
Thread(const Thread&); | ||||
Thread& operator=(const Thread&); | ||||
protected: | /** | |||
/** Thread descriptor */ | * This class is used to encapsulate the paramete | |||
#ifdef HAVE_PTHREAD | rs to | |||
pthread_t thread; | * Thread::run when they are passed to Thread::la | |||
#elif defined(HAVE_MS_THREAD) | uncher. | |||
void * thread; | * | |||
#endif | */ | |||
RunnablePtr runnable; | class LaunchPackage { | |||
MDC::Map parentMDCMap; | public: | |||
}; | /** | |||
* Placement new to create LaunchPackage in sp | ||||
ecified pool. | ||||
* LaunchPackage needs to be dynamically alloc | ||||
ated since | ||||
* since a stack allocated instance may go out | ||||
of scope | ||||
* before thread is launched. | ||||
*/ | ||||
static void* operator new(size_t, Pool& p); | ||||
/** | ||||
* operator delete would be called if exception | ||||
during construction. | ||||
*/ | ||||
static void operator delete(void*, Pool& p); | ||||
/** | ||||
* Create new instance. | ||||
*/ | ||||
LaunchPackage(Thread* thread, Runnable runnable | ||||
, void* data); | ||||
/** | ||||
* Gets thread parameter. | ||||
* @return thread. | ||||
*/ | ||||
Thread* getThread() const; | ||||
/** | ||||
* Gets runnable parameter. | ||||
* @return runnable. | ||||
*/ | ||||
Runnable getRunnable() const; | ||||
/** | ||||
* gets data parameter. | ||||
* @return thread. | ||||
*/ | ||||
void* getData() const; | ||||
private: | ||||
LaunchPackage(const LaunchPackage&); | ||||
LaunchPackage& operator=(const LaunchPackage&); | ||||
Thread* thread; | ||||
Runnable runnable; | ||||
void* data; | ||||
}; | ||||
typedef ObjectPtrT<Thread> ThreadPtr; | /** | |||
* This object atomically sets the specified memor | ||||
y location | ||||
* to non-zero on construction and to zero on dest | ||||
ruction. | ||||
* Used to maintain Thread.alive. | ||||
*/ | ||||
class LaunchStatus { | ||||
public: | ||||
/* | ||||
* Construct new instance. | ||||
* @param p address of memory to set to non-ze | ||||
ro on construction, zero on destruction. | ||||
*/ | ||||
LaunchStatus(volatile unsigned int* p); | ||||
/** | ||||
* Destructor. | ||||
*/ | ||||
~LaunchStatus(); | ||||
private: | ||||
LaunchStatus(const LaunchStatus&); | ||||
LaunchStatus& operator=(const LaunchStatus&); | ||||
volatile unsigned int* alive; | ||||
}; | ||||
} // namespace helpers | /** | |||
}; //namespace log4cxx | * This method runs on the created thread and sets | |||
up thread-local storage | ||||
* used to keep the reference to the corresponding | ||||
Thread object and | ||||
* is responsible for maintaining Thread.alive. | ||||
*/ | ||||
static void* LOG4CXX_THREAD_FUNC launcher(apr_threa | ||||
d_t* thread, void* data); | ||||
/** | ||||
* Get a key to the thread local storage used to | ||||
hold the reference to | ||||
* the corresponding Thread object. | ||||
*/ | ||||
static ThreadLocal& getThreadLocal(); | ||||
}; | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_THREAD_H | #endif //_LOG4CXX_HELPERS_THREAD_H | |||
End of changes. 16 change blocks. | ||||
127 lines changed or deleted | 172 lines changed or added | |||
threadspecificdata.h | threadspecificdata.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_THREAD_SPECIFIC_DATA_H | #ifndef _LOG4CXX_HELPERS_THREAD_SPECIFIC_DATA_H | |||
#define _LOG4CXX_HELPERS_THREAD_SPECIFIC_DATA_H | #define _LOG4CXX_HELPERS_THREAD_SPECIFIC_DATA_H | |||
#include <log4cxx/config.h> | #include <log4cxx/ndc.h> | |||
#include <log4cxx/mdc.h> | ||||
#ifdef HAVE_PTHREAD | ||||
#include <pthread.h> | ||||
#endif | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class LOG4CXX_EXPORT ThreadSpecificData | /** | |||
{ | * This class contains all the thread-specific | |||
public: | * data in use by log4cxx. | |||
ThreadSpecificData(); | */ | |||
~ThreadSpecificData(); | class LOG4CXX_EXPORT ThreadSpecificData | |||
void * GetData() const; | { | |||
void SetData(void * data); | public: | |||
ThreadSpecificData(); | ||||
~ThreadSpecificData(); | ||||
protected: | /** | |||
#ifdef HAVE_PTHREAD | * Gets current thread specific data. | |||
pthread_key_t key; | * @return thread specific data, may be null. | |||
#elif defined(HAVE_MS_THREAD) | */ | |||
void * key; | static ThreadSpecificData* getCurrentData(); | |||
#endif | /** | |||
}; | * Release this ThreadSpecficData if empty. | |||
} // namespace helpers | */ | |||
}; // namespace log4cxx | void recycle(); | |||
static void put(const LogString& key, const LogStri | ||||
ng& val); | ||||
static void push(const LogString& val); | ||||
static void inherit(const log4cxx::NDC::Stack& stac | ||||
k); | ||||
log4cxx::NDC::Stack& getStack(); | ||||
log4cxx::MDC::Map& getMap(); | ||||
private: | ||||
static ThreadSpecificData& getDataNoThreads(); | ||||
static ThreadSpecificData* createCurrentData(); | ||||
log4cxx::NDC::Stack ndcStack; | ||||
log4cxx::MDC::Map mdcMap; | ||||
}; | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
#endif | #endif | |||
End of changes. 4 change blocks. | ||||
28 lines changed or deleted | 47 lines changed or added | |||
timezone.h | timezone.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_TIMEZONE_H | #ifndef _LOG4CXX_HELPERS_TIMEZONE_H | |||
#define _LOG4CXX_HELPERS_TIMEZONE_H | #define _LOG4CXX_HELPERS_TIMEZONE_H | |||
#include <log4cxx/config.h> | #include <log4cxx/logstring.h> | |||
#include <log4cxx/helpers/tchar.h> | ||||
#include <log4cxx/helpers/objectimpl.h> | #include <log4cxx/helpers/objectimpl.h> | |||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <map> | ||||
struct apr_time_exp_t; | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
class TimeZone; | class TimeZone; | |||
typedef helpers::ObjectPtrT<TimeZone> TimeZonePtr; | LOG4CXX_PTR_DEF(TimeZone); | |||
class LOG4CXX_EXPORT TimeZone : public helpers::ObjectImpl | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(TimeZone) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(TimeZone) | ||||
END_LOG4CXX_CAST_MAP() | ||||
TimeZone(const String& ID); | ||||
~TimeZone(); | ||||
/** | ||||
Returns the offset of this time zone from UTC at the | ||||
specified | ||||
date. If Daylight Saving Time is in effect at the sp | ||||
ecified date, | ||||
the offset value is adjusted with the amount of dayl | ||||
ight saving. | ||||
@param date the date represented in milliseconds sin | ||||
ce January 1, | ||||
1970 00:00:00 GMT | ||||
@return the amount of time in milliseconds to add to | ||||
UTC to get | ||||
local time. | ||||
*/ | ||||
int getOffset(int64_t date) const; | ||||
static TimeZonePtr getDefault(); | ||||
static TimeZonePtr getTimeZone(const String& ID); | ||||
/** | ||||
Queries if the given date is in daylight savings tim | ||||
e in this time | ||||
zone. | ||||
@param date the given Date. | ||||
@return true if the given date is in daylight saving | ||||
s time, false, | ||||
otherwise. | ||||
*/ | ||||
bool inDaylightTime(int64_t date) const; | ||||
/** | ||||
Returns the amount of time to be added to local stan | ||||
dard time to | ||||
get local wall clock time. | ||||
@return the amount of saving time in milliseconds | ||||
*/ | ||||
inline int getDSTSavings() const | ||||
{ return DSTSavings; } | ||||
/** | ||||
Returns the amount of time in milliseconds to add to | ||||
UTC to get | ||||
standard time in this time zone. | ||||
Because this value is not affected by daylight savin | class LOG4CXX_EXPORT TimeZone : public helpers::ObjectImpl | |||
g time, it is | { | |||
called raw offset. | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(TimeZone) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(TimeZone) | ||||
END_LOG4CXX_CAST_MAP() | ||||
@return the amount of raw offset time in millisecond | static const TimeZonePtr& getDefault(); | |||
s to add to | static const TimeZonePtr& getGMT(); | |||
UTC. | static const TimeZonePtr getTimeZone(const LogString& ID); | |||
*/ | ||||
inline int getRawOffset() const | ||||
{ return rawOffset; } | ||||
/** | const LogString getID() const { | |||
Queries if this time zone uses daylight savings time | return id; | |||
. | } | |||
@return true if this time zone uses daylight savings | ||||
time, false, | ||||
otherwise. | ||||
*/ | ||||
inline bool useDaylightTime() const | ||||
{ return DSTSavings != 0; } | ||||
protected: | /** | |||
String ID; | * Expand an APR time into the human readable | |||
int rawOffset; | * components for this timezone. | |||
int DSTSavings; | */ | |||
virtual log4cxx_status_t explode(apr_time_exp_t* result, | ||||
log4cxx_time_t input) const = 0; | ||||
class Rule | protected: | |||
{ | TimeZone(const LogString& ID); | |||
public: | virtual ~TimeZone(); | |||
Rule(int year); | ||||
int year; | ||||
int64_t startDate; | ||||
int64_t endDate; | ||||
}; | ||||
typedef std::map<long, Rule *> RuleMap; | const LogString id; | |||
mutable RuleMap rules; | }; | |||
static TimeZonePtr defaultTimeZone; | } | |||
}; | ||||
} | ||||
} | } | |||
#endif //_LOG4CXX_HELPERS_TIMEZONE_H | #endif //_LOG4CXX_HELPERS_TIMEZONE_H | |||
End of changes. 11 change blocks. | ||||
104 lines changed or deleted | 38 lines changed or added | |||
transform.h | transform.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_TRANSFORM_H | #ifndef _LOG4CXX_HELPERS_TRANSFORM_H | |||
#define _LOG4CXX_HELPERS_TRANSFORM_H | #define _LOG4CXX_HELPERS_TRANSFORM_H | |||
#include <log4cxx/helpers/tchar.h> | #include <log4cxx/logstring.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace helpers | |||
{ | { | |||
/** | /** | |||
Utility class for transforming strings. | Utility class for transforming strings. | |||
*/ | */ | |||
class LOG4CXX_EXPORT Transform | class LOG4CXX_EXPORT Transform | |||
{ | { | |||
private: | public: | |||
static String CDATA_START; | /** | |||
static String CDATA_END; | * This method takes a string which may contain HTML | |||
static String CDATA_PSEUDO_END; | tags (ie, | |||
static String CDATA_EMBEDED_END; | * <b>, <table>, etc) and replaces any ' | |||
static String::size_type CDATA_END_LEN; | <' and '>' | |||
* characters with respective predefined entity refe | ||||
public: | rences. | |||
/** | * | |||
* This method takes a string which may contain HTML | * @param buf output stream where to write the modif | |||
tags (ie, | ied string. | |||
* <b>, <table>, etc) and replaces any '< | * @param input The text to be converted. | |||
' and '>' | * @return The input string with the characters '<' | |||
* characters with respective predefined entity refer | and '>' replaced with | |||
ences. | * &lt; and &gt; respectively. | |||
* | * */ | |||
* @param buf output stream where to write the modifi | static void appendEscapingTags( | |||
ed string. | LogString& buf, const LogString& input); | |||
* @param input The text to be converted. | ||||
* @return The input string with the characters '<' a | ||||
nd '>' replaced with | ||||
* &lt; and &gt; respectively. | ||||
* */ | ||||
static void appendEscapingTags( | ||||
ostream& buf, const String& input); | ||||
/** | /** | |||
* Ensures that embeded CDEnd strings (]]>) are handl | * Ensures that embeded CDEnd strings (]]>) are hand | |||
ed properly | led properly | |||
* within message, NDC and throwable tag text. | * within message, NDC and throwable tag text. | |||
* | * | |||
* @param buf output stream holding the XML data to t | * @param buf output stream holding the XML data to | |||
his point. The | this point. The | |||
* initial CDStart (<![CDATA[) and final CDEnd (]]>) | * initial CDStart (<![CDATA[) and final CDEnd (]]>) | |||
of the CDATA | of the CDATA | |||
* section are the responsibility of the calling meth | * section are the responsibility of the calling met | |||
od. | hod. | |||
* @param input The String that is inserted into an e | * @param input The String that is inserted into an | |||
xisting CDATA | existing CDATA | |||
* Section within buf. | * Section within buf. | |||
*/ | */ | |||
static void appendEscapingCDATA( | static void appendEscapingCDATA( | |||
ostream& buf, const String& input); | LogString& buf, const LogString& input); | |||
}; // class Transform | }; // class Transform | |||
} // namespace helpers | } // namespace helpers | |||
}; //namespace log4cxx | } //namespace log4cxx | |||
#endif // _LOG4CXX_HELPERS_TRANSFORM_H | #endif // _LOG4CXX_HELPERS_TRANSFORM_H | |||
End of changes. 4 change blocks. | ||||
58 lines changed or deleted | 52 lines changed or added | |||
triggeringeventevaluator.h | triggeringeventevaluator.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | #ifndef _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | |||
#define _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | #define _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/spi/loggingevent.h> | |||
#include <log4cxx/helpers/objectptr.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace spi | namespace spi | |||
{ | { | |||
class TriggeringEventEvaluator; | /** | |||
typedef helpers::ObjectPtrT<TriggeringEventEvaluator> | Implementions of this interface allow certain appenders to | |||
TriggeringEventEvaluatorPtr; | decide | |||
when to perform an appender specific action. | ||||
class LoggingEvent; | ||||
typedef helpers::ObjectPtrT<Logger> LoggerPtr; | ||||
/** | ||||
Implementions of this interface allow certain appenders to d | ||||
ecide | ||||
when to perform an appender specific action. | ||||
<p>For example the {@link net::SMTPAppender SMTPAppender} se | <p>For example the {@link net::SMTPAppender SMTPAppender} s | |||
nds | ends | |||
an email when the #isTriggeringEvent method returns | an email when the #isTriggeringEvent method returns | |||
<code>true</code> and adds the event to an internal buffer w | <code>true</code> and adds the event to an internal buffer | |||
hen the | when the | |||
returned result is <code>false</code>. | returned result is <code>false</code>. | |||
*/ | */ | |||
class LOG4CXX_EXPORT TriggeringEventEvaluator : public virtu | class LOG4CXX_EXPORT TriggeringEventEvaluator : public virt | |||
al helpers::Object | ual helpers::Object | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(TriggeringEventEvalu | DECLARE_ABSTRACT_LOG4CXX_OBJECT(TriggeringEventEval | |||
ator) | uator) | |||
/** | /** | |||
Is this the triggering event? | Is this the triggering event? | |||
*/ | */ | |||
virtual bool isTriggeringEvent(const spi::LoggingEve | virtual bool isTriggeringEvent(const spi::LoggingEv | |||
ntPtr& event) = 0; | entPtr& event) = 0; | |||
}; | }; | |||
} | LOG4CXX_PTR_DEF(TriggeringEventEvaluator); | |||
} | ||||
} | } | |||
#endif // _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | #endif // _LOG4CXX_SPI_TRIGGERING_EVENT_EVALUATOR_H | |||
End of changes. 5 change blocks. | ||||
40 lines changed or deleted | 34 lines changed or added | |||
ttcclayout.h | ttcclayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_TTCC_LAYOUT_H | #ifndef _LOG4CXX_TTCC_LAYOUT_H | |||
#define _LOG4CXX_TTCC_LAYOUT_H | #define _LOG4CXX_TTCC_LAYOUT_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/helpers/datelayout.h> | #include <log4cxx/helpers/datelayout.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class TTCCLayout; | ||||
typedef helpers::ObjectPtrT<TTCCLayout> TTCCLayoutPtr; | ||||
/** | /** | |||
TTCC layout format consists of time, thread, category and nested | TTCC layout format consists of time, thread, logger name and nested | |||
diagnostic context information, hence the name. | diagnostic context information, hence the name. | |||
<p>Each of the four fields can be individually enabled or | <p>Each of the four fields can be individually enabled or | |||
disabled. The time format depends on the <code>DateFormat</code> | disabled. The time format depends on the <code>DateFormat</code> | |||
used. | used. | |||
<p>Here is an example TTCCLayout output with the | <p>Here is an example TTCCLayout output with the | |||
{@link helpers::RelativeTimeDateFormat RelativeTimeDateFormat}. | {@link helpers::RelativeTimeDateFormat RelativeTimeDateFormat}. | |||
<pre> | <pre> | |||
skipping to change at line 55 | skipping to change at line 59 | |||
317 [main] INFO examples.SortAlgo.DUMP - Element [0] = 0 | 317 [main] INFO examples.SortAlgo.DUMP - Element [0] = 0 | |||
331 [main] INFO examples.SortAlgo.DUMP - Element [1] = 1 | 331 [main] INFO examples.SortAlgo.DUMP - Element [1] = 1 | |||
343 [main] INFO examples.Sort - The next log statement should be an er ror message. | 343 [main] INFO examples.Sort - The next log statement should be an er ror message. | |||
346 [main] ERROR examples.SortAlgo.DUMP - Tried to dump an uninitialize d array. | 346 [main] ERROR examples.SortAlgo.DUMP - Tried to dump an uninitialize d array. | |||
467 [main] INFO examples.Sort - Exiting main method. | 467 [main] INFO examples.Sort - Exiting main method. | |||
</pre> | </pre> | |||
<p>The first field is the number of milliseconds elapsed since the | <p>The first field is the number of milliseconds elapsed since the | |||
start of the program. The second field is the thread outputting the | start of the program. The second field is the thread outputting the | |||
log statement. The third field is the level, the fourth field is | log statement. The third field is the level, the fourth field is | |||
the category to which the statement belongs. | the logger to which the statement belongs. | |||
<p>The fifth field (just before the '-') is the nested diagnostic | <p>The fifth field (just before the '-') is the nested diagnostic | |||
context. Note the nested diagnostic context may be empty as in the | context. Note the nested diagnostic context may be empty as in the | |||
first two statements. The text after the '-' is the message of the | first two statements. The text after the '-' is the message of the | |||
statement. | statement. | |||
<p><b>WARNING</b> Do not use the same TTCCLayout instance from | <p><b>WARNING</b> Do not use the same TTCCLayout instance from | |||
within different appenders. The TTCCLayout is not thread safe when | within different appenders. The TTCCLayout is not thread safe when | |||
used in his way. However, it is perfectly safe to use a TTCCLayout | used in his way. However, it is perfectly safe to use a TTCCLayout | |||
instance from just one appender. | instance from just one appender. | |||
<p>PatternLayout offers a much more flexible alternative. | <p>PatternLayout offers a much more flexible alternative. | |||
*/ | */ | |||
class LOG4CXX_EXPORT TTCCLayout : public helpers::DateLayout | class LOG4CXX_EXPORT TTCCLayout : public helpers::DateLayout | |||
{ | { | |||
private: | private: | |||
// Internal representation of options | // Internal representation of options | |||
bool threadPrinting; | bool threadPrinting; | |||
bool categoryPrefixing; | bool categoryPrefixing; | |||
bool contextPrinting; | bool contextPrinting; | |||
bool filePrinting; | bool filePrinting; | |||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(TTCCLayout) | DECLARE_LOG4CXX_OBJECT(TTCCLayout) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(TTCCLayout) | LOG4CXX_CAST_ENTRY(TTCCLayout) | |||
LOG4CXX_CAST_ENTRY_CHAIN(Layout) | LOG4CXX_CAST_ENTRY_CHAIN(Layout) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
Instantiate a TTCCLayout object with {@link | Instantiate a TTCCLayout object with {@link | |||
helpers::RelativeTimeDateFormat RelativeTimeDateFormat} as the date | helpers::RelativeTimeDateFormat RelativeTimeDateFormat} as the date | |||
formatter in the local time zone. | formatter in the local time zone. | |||
*/ | */ | |||
TTCCLayout(); | TTCCLayout(); | |||
/** | /** | |||
Instantiate a TTCCLayout object using the local time zone. The | Instantiate a TTCCLayout object using the local time zone. The | |||
DateFormat used will depend on the <code>dateFormatType</code>. | DateFormat used will depend on the <code>dateFormatType</code>. | |||
<p>This constructor just calls the {@link | <p>This constructor just calls the {@link | |||
helpers::DateLayout#setDateFormat DateLayout::setDateFormat} method. | helpers::DateLayout#setDateFormat DateLayout::setDateFormat} method | |||
*/ | . | |||
TTCCLayout(const String& dateFormatType); | */ | |||
TTCCLayout(const LogString& dateFormatType); | ||||
/** | /** | |||
The <b>ThreadPrinting</b> option specifies whether the name of the | The <b>ThreadPrinting</b> option specifies whether the name of the | |||
current thread is part of log output or not. This is true by default | current thread is part of log output or not. This is true by defaul | |||
. | t. | |||
*/ | */ | |||
inline void setThreadPrinting(bool threadPrinting) | inline void setThreadPrinting(bool threadPrinting1) | |||
{ this->threadPrinting = threadPrinting; } | { this->threadPrinting = threadPrinting1; } | |||
/** | /** | |||
Returns value of the <b>ThreadPrinting</b> option. | Returns value of the <b>ThreadPrinting</b> option. | |||
*/ | */ | |||
inline bool getThreadPrinting() const | inline bool getThreadPrinting() const | |||
{ return threadPrinting; } | { return threadPrinting; } | |||
/** | /** | |||
The <b>CategoryPrefixing</b> option specifies whether Logger | The <b>CategoryPrefixing</b> option specifies whether Logger | |||
name is part of log output or not. This is true by default. | name is part of log output or not. This is true by default. | |||
*/ | */ | |||
inline void setCategoryPrefixing(bool categoryPrefixing) | inline void setCategoryPrefixing(bool categoryPrefixing1) | |||
{ this->categoryPrefixing = categoryPrefixing; } | { this->categoryPrefixing = categoryPrefixing1; } | |||
/** | /** | |||
Returns value of the <b>CategoryPrefixing</b> option. | Returns value of the <b>CategoryPrefixing</b> option. | |||
*/ | */ | |||
inline bool getCategoryPrefixing() const | inline bool getCategoryPrefixing() const | |||
{ return categoryPrefixing; } | { return categoryPrefixing; } | |||
/** | /** | |||
The <b>ContextPrinting</b> option specifies log output will include | The <b>ContextPrinting</b> option specifies log output will include | |||
the nested context information belonging to the current thread. | the nested context information belonging to the current thread. | |||
This is true by default. | This is true by default. | |||
*/ | */ | |||
inline void setContextPrinting(bool contextPrinting) | inline void setContextPrinting(bool contextPrinting1) | |||
{ this->contextPrinting = contextPrinting; } | { this->contextPrinting = contextPrinting1; } | |||
/** | /** | |||
Returns value of the <b>ContextPrinting</b> option. | Returns value of the <b>ContextPrinting</b> option. | |||
*/ | */ | |||
inline bool getContextPrinting() const | inline bool getContextPrinting() const | |||
{ return contextPrinting; } | { return contextPrinting; } | |||
/** | /** | |||
The <b>FilePrinting</b> option specifies log output will include | The <b>FilePrinting</b> option specifies log output will include | |||
the file and the line where the log statement was written. | the file and the line where the log statement was written. | |||
*/ | */ | |||
inline void setFilePrinting(bool filePrinting) | inline void setFilePrinting(bool filePrinting1) | |||
{ this->filePrinting = filePrinting; } | { this->filePrinting = filePrinting1; } | |||
/** | /** | |||
Returns value of the <b>ContextPrinting</b> option. | Returns value of the <b>ContextPrinting</b> option. | |||
*/ | */ | |||
inline bool getFilePrinting() const | inline bool getFilePrinting() const | |||
{ return filePrinting; } | { return filePrinting; } | |||
/** | /** | |||
In addition to the level of the statement and message, this function | In addition to the level of the statement and message, this functio | |||
writes to the ouput stream time, thread, category and NDC | n | |||
information. | writes to the ouput stream time, thread, logger and NDC | |||
information. | ||||
<p>Time, thread, category and diagnostic context are printed | <p>Time, thread, logger and diagnostic context are printed | |||
depending on options. | depending on options. | |||
@param output | @param output destination to receive formatted output. | |||
@param event | @param event event to format. | |||
*/ | @param pool pool used to allocate memory needed during formatting. | |||
virtual void format(ostream& output, const spi::LoggingEventPtr& eve | */ | |||
nt) const; | virtual void format(LogString& output, | |||
const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool | ||||
) const; | ||||
/** | /** | |||
The TTCCLayout does not handle the throwable contained within | The TTCCLayout does not handle the throwable contained within | |||
{@link spi::LoggingEvent LoggingEvents}. Thus, it returns | {@link spi::LoggingEvent LoggingEvents}. Thus, it returns | |||
<code>true</code>. | <code>true</code>. | |||
*/ | */ | |||
virtual bool ignoresThrowable() const { return true; } | virtual bool ignoresThrowable() const { return true; } | |||
}; | }; | |||
LOG4CXX_PTR_DEF(TTCCLayout); | ||||
} | } | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif | #endif | |||
End of changes. 22 change blocks. | ||||
100 lines changed or deleted | 113 lines changed or added | |||
writerappender.h | writerappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_WRITER_APPENDER_H | #ifndef _LOG4CXX_WRITER_APPENDER_H | |||
#define _LOG4CXX_WRITER_APPENDER_H | #define _LOG4CXX_WRITER_APPENDER_H | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/appenderskeleton.h> | |||
#include <log4cxx/helpers/outputstreamwriter.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
class WriterAppender; | ||||
typedef helpers::ObjectPtrT<WriterAppender> WriterAppenderPtr; | ||||
/** | namespace helpers { | |||
WriterAppender appends log events to a standard output stream | class Transcoder; | |||
(ostream or wostream) | } | |||
*/ | ||||
class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton | ||||
{ | ||||
protected: | ||||
/** | ||||
Immediate flush means that the underlying writer or output s | ||||
tream | ||||
will be flushed at the end of each append operation. Immedia | ||||
te | ||||
flush is slower but ensures that each append request is actu | ||||
ally | ||||
written. If <code>immediateFlush</code> is set to | ||||
<code>false</code>, then there is a good chance that the las | /** | |||
t few | WriterAppender appends log events to a standard output stream | |||
logs events are not actually written to persistent media if | */ | |||
and | class LOG4CXX_EXPORT WriterAppender : public AppenderSkeleton | |||
when the application crashes. | { | |||
private: | ||||
/** | ||||
Immediate flush means that the underlying writer or output | ||||
stream | ||||
will be flushed at the end of each append operation. Immedi | ||||
ate | ||||
flush is slower but ensures that each append request is act | ||||
ually | ||||
written. If <code>immediateFlush</code> is set to | ||||
<code>false</code>, then there is a good chance that the la | ||||
st few | ||||
logs events are not actually written to persistent media if | ||||
and | ||||
when the application crashes. | ||||
<p>The <code>immediateFlush</code> variable is set to | <p>The <code>immediateFlush</code> variable is set to | |||
<code>true</code> by default. | <code>true</code> by default. | |||
*/ | */ | |||
bool immediateFlush; | bool immediateFlush; | |||
/** | /** | |||
The encoding to use when opening an input stream. | The encoding to use when opening an input stream. | |||
<p>The <code>encoding</code> variable is set to <code>""</co | <p>The <code>encoding</code> variable is set to <code>""</c | |||
de> by | ode> by | |||
default which results in the utilization of the system's def | default which results in the utilization of the system's de | |||
ault | fault | |||
encoding. */ | encoding. */ | |||
String encoding; | LogString encoding; | |||
/** This is the output stream where we will write to.*/ | /** | |||
ostream * os; | * This is the {@link Writer Writer} where we will write to | |||
. | ||||
*/ | ||||
log4cxx::helpers::WriterPtr writer; | ||||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(WriterAppender) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(WriterAppender) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(WriterAppender) | LOG4CXX_CAST_ENTRY(WriterAppender) | |||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
/** | /** | |||
This default constructor does nothing.*/ | This default constructor does nothing.*/ | |||
WriterAppender(); | WriterAppender(); | |||
protected: | ||||
WriterAppender(const LayoutPtr& layout, | ||||
log4cxx::helpers::WriterPtr& writer); | ||||
WriterAppender(const LayoutPtr& layout); | ||||
/** | public: | |||
Instantiate a WriterAppender and set the output destination | ~WriterAppender(); | |||
to | ||||
<code>os</code>.*/ | ||||
WriterAppender(const LayoutPtr& layout, ostream * os); | ||||
~WriterAppender(); | /** | |||
Derived appenders should override this method if option str | ||||
ucture | ||||
requires it. | ||||
*/ | ||||
virtual void activateOptions(log4cxx::helpers::Pool& pool); | ||||
/** | /** | |||
If the <b>ImmediateFlush</b> option is set to | If the <b>ImmediateFlush</b> option is set to | |||
<code>true</code>, the appender will flush at the end of eac | <code>true</code>, the appender will flush at the end of ea | |||
h | ch | |||
write. This is the default behavior. If the option is set to | write. This is the default behavior. If the option is set t | |||
<code>false</code>, then the underlying stream can defer wri | o | |||
ting | <code>false</code>, then the underlying stream can defer wr | |||
to physical medium to a later time. | iting | |||
to physical medium to a later time. | ||||
<p>Avoiding the flush operation at the end of each append re | <p>Avoiding the flush operation at the end of each append r | |||
sults in | esults in | |||
a performance gain of 10 to 20 percent. However, there is sa | a performance gain of 10 to 20 percent. However, there is s | |||
fety | afety | |||
tradeoff involved in skipping flushing. Indeed, when flushin | tradeoff involved in skipping flushing. Indeed, when flushi | |||
g is | ng is | |||
skipped, then it is likely that the last few log events will | skipped, then it is likely that the last few log events wil | |||
not | l not | |||
be recorded on disk when the application exits. This is a hi | be recorded on disk when the application exits. This is a h | |||
gh | igh | |||
price to pay even for a 20% performance gain. | price to pay even for a 20% performance gain. | |||
*/ | */ | |||
void setImmediateFlush(bool value) { immediateFlush = value; | void setImmediateFlush(bool value); | |||
} | /** | |||
Returns value of the <b>ImmediateFlush</b> option. | ||||
*/ | ||||
bool getImmediateFlush() const { return immediateFlush; } | ||||
/** | /** | |||
Returns value of the <b>ImmediateFlush</b> option. | This method is called by the AppenderSkeleton#doAppend | |||
*/ | method. | |||
bool getImmediateFlush() const { return immediateFlush; } | ||||
/** | <p>If the output stream exists and is writable then write a | |||
This method is called by the AppenderSkeleton#doAppend | log | |||
method. | statement to the output stream. Otherwise, write a single w | |||
arning | ||||
message to <code>stderr</code>. | ||||
<p>If the output stream exists and is writable then write a | <p>The format of the output will depend on this appender's | |||
log | layout. | |||
statement to the output stream. Otherwise, write a single wa | ||||
rning | ||||
message to <code>stderr</code>. | ||||
<p>The format of the output will depend on this appender's | */ | |||
layout. | virtual void append(const spi::LoggingEventPtr& event, log4 | |||
cxx::helpers::Pool& p); | ||||
*/ | protected: | |||
virtual void append(const spi::LoggingEventPtr& event); | /** | |||
This method determines if there is a sense in attempting to | ||||
append. | ||||
protected: | <p>It checks whether there is a set output target and also | |||
/** | if | |||
This method determines if there is a sense in attempting to | there is a set layout. If these checks fail, then the boole | |||
append. | an | |||
value <code>false</code> is returned. */ | ||||
virtual bool checkEntryConditions() const; | ||||
<p>It checks whether there is a set output target and also i | public: | |||
f | /** | |||
there is a set layout. If these checks fail, then the boolea | Close this appender instance. The underlying stream or writ | |||
n | er is | |||
value <code>false</code> is returned. */ | also closed. | |||
virtual bool checkEntryConditions() const; | ||||
public: | <p>Closed appenders cannot be reused. | |||
/** | */ | |||
Close this appender instance. The underlying stream or write | virtual void close(); | |||
r is | ||||
also closed. | ||||
<p>Closed appenders cannot be reused. | protected: | |||
*/ | /** | |||
virtual void close(); | * Close the underlying {@link log4cxx::helpers::Writer}. | |||
* */ | ||||
void closeWriter(); | ||||
protected: | /** | |||
/** | Returns an OutputStreamWriter when passed an OutputStre | |||
* Close the underlying output stream. | am. The | |||
* */ | encoding used will depend on the value of the | |||
virtual void closeWriter() = 0; | <code>encoding</code> property. If the encoding value | |||
is | ||||
specified incorrectly the writer will be opened using t | ||||
he default | ||||
system encoding (an error message will be printed to th | ||||
e loglog. */ | ||||
virtual log4cxx::helpers::WriterPtr createWriter( | ||||
log4cxx::helpers::OutputStreamPtr& os); | ||||
public: | public: | |||
const String& getEncoding() const { return encoding; } | LogString getEncoding() const; | |||
void setEncoding(const String& value) { encoding = value; } | void setEncoding(const LogString& value); | |||
void setOption(const LogString& option, | ||||
const LogString& value); | ||||
protected: | /** | |||
/** | <p>Sets the Writer where the log output will go. The | |||
specified Writer must be opened by the user and be | ||||
writable. | ||||
Actual writing occurs here. | <p>The <code>java.io.Writer</code> will be closed when th | |||
e | ||||
appender instance is closed. | ||||
<p>Most subclasses of <code>WriterAppender</code> will need | <p><b>WARNING:</b> Logging to an unopened Writer will fai | |||
to | l. | |||
override this method. | <p> | |||
*/ | @param writer An already opened Writer. */ | |||
virtual void subAppend(const spi::LoggingEventPtr& event); | void setWriter(const log4cxx::helpers::WriterPtr& writer); | |||
/** | virtual bool requiresLayout() const; | |||
The WriterAppender requires a layout. Hence, this method returns | ||||
<code>true</code>. | ||||
*/ | ||||
public: | ||||
virtual bool requiresLayout() const { return true; } | ||||
/** | protected: | |||
Clear internal references to the writer and other variables. | /** | |||
Actual writing occurs here. | ||||
*/ | ||||
virtual void subAppend(const spi::LoggingEventPtr& event, lo | ||||
g4cxx::helpers::Pool& p); | ||||
Subclasses can override this method for an alternate closing | /** | |||
behavior. */ | Write a footer as produced by the embedded layout's | |||
Layout#appendFooter method. */ | ||||
virtual void writeFooter(log4cxx::helpers::Pool& p); | ||||
protected: | /** | |||
virtual void reset(); | Write a header as produced by the embedded layout's | |||
Layout#appendHeader method. */ | ||||
virtual void writeHeader(log4cxx::helpers::Pool& p); | ||||
/** | private: | |||
Write a footer as produced by the embedded layout's | // | |||
Layout#appendFooter method. */ | // prevent copy and assignment | |||
protected: | WriterAppender(const WriterAppender&); | |||
virtual void writeFooter(); | WriterAppender& operator=(const WriterAppender&); | |||
}; | ||||
LOG4CXX_PTR_DEF(WriterAppender); | ||||
/** | ||||
Write a header as produced by the embedded layout's | ||||
Layout#appendHeader method. */ | ||||
protected: | ||||
virtual void writeHeader(); | ||||
}; | ||||
} //namespace log4cxx | } //namespace log4cxx | |||
#if defined(_MSC_VER) | ||||
#pragma warning ( pop ) | ||||
#endif | ||||
#endif //_LOG4CXX_WRITER_APPENDER_H | #endif //_LOG4CXX_WRITER_APPENDER_H | |||
End of changes. 37 change blocks. | ||||
151 lines changed or deleted | 190 lines changed or added | |||
xml.h | xml.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_HELPERS_XML_H | #ifndef _LOG4CXX_HELPERS_XML_H | |||
#define _LOG4CXX_HELPERS_XML_H | #define _LOG4CXX_HELPERS_XML_H | |||
#include <log4cxx/helpers/tchar.h> | #if defined(_MSC_VER) | |||
#pragma warning ( push ) | ||||
#pragma warning ( disable: 4231 4251 4275 4786 ) | ||||
#endif | ||||
#include <log4cxx/logstring.h> | ||||
#include <log4cxx/helpers/objectptr.h> | #include <log4cxx/helpers/objectptr.h> | |||
#include <log4cxx/helpers/object.h> | #include <log4cxx/helpers/object.h> | |||
#include <log4cxx/helpers/exception.h> | #include <log4cxx/helpers/exception.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | class File; | |||
{ | namespace helpers | |||
class XMLDOMNode; | { | |||
typedef helpers::ObjectPtrT<XMLDOMNode> XMLDOMNodePtr; | class XMLDOMNode; | |||
typedef helpers::ObjectPtrT<XMLDOMNode> XMLDOMNodePtr; | ||||
class XMLDOMDocument; | class XMLDOMDocument; | |||
typedef helpers::ObjectPtrT<XMLDOMDocument> XMLDOMDocumentPt | typedef helpers::ObjectPtrT<XMLDOMDocument> XMLDOMDocumentP | |||
r; | tr; | |||
class XMLDOMElement; | class XMLDOMNodeList; | |||
typedef helpers::ObjectPtrT<XMLDOMElement> XMLDOMElementPtr; | typedef helpers::ObjectPtrT<XMLDOMNodeList> XMLDOMNodeListP | |||
tr; | ||||
class XMLDOMNodeList; | class LOG4CXX_EXPORT DOMException : public RuntimeException | |||
typedef helpers::ObjectPtrT<XMLDOMNodeList> XMLDOMNodeListPt | { | |||
r; | public: | |||
DOMException() : RuntimeException(LOG4CXX_STR("DOM exce | ||||
ption")) {} | ||||
}; | ||||
class LOG4CXX_EXPORT DOMException : public RuntimeException | /** | |||
{ | The XMLDOMNode interface is the primary datatype for the en | |||
}; | tire Document | |||
Object Model. | ||||
*/ | ||||
class LOG4CXX_EXPORT XMLDOMNode : virtual public Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMNode) | ||||
enum XMLDOMNodeType | ||||
{ | ||||
NOT_IMPLEMENTED_NODE = 0, | ||||
ELEMENT_NODE = 1, | ||||
DOCUMENT_NODE = 9 | ||||
}; | ||||
/** | virtual XMLDOMNodeListPtr getChildNodes() = 0; | |||
The XMLDOMNode interface is the primary datatype for the ent | virtual XMLDOMNodeType getNodeType() = 0; | |||
ire Document | virtual XMLDOMDocumentPtr getOwnerDocument() = 0; | |||
Object Model. | }; | |||
*/ | LOG4CXX_PTR_DEF(XMLDOMNode); | |||
class LOG4CXX_EXPORT XMLDOMNode : virtual public Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMNode) | ||||
enum XMLDOMNodeType | ||||
{ | ||||
NOT_IMPLEMENTED_NODE = 0, | ||||
ELEMENT_NODE = 1, | ||||
DOCUMENT_NODE = 9 | ||||
}; | ||||
virtual XMLDOMNodeListPtr getChildNodes() = 0; | /** | |||
virtual XMLDOMNodeType getNodeType() = 0; | The XMLDOMElement interface represents an element in an XML | |||
virtual XMLDOMDocumentPtr getOwnerDocument() = 0; | document | |||
}; | */ | |||
class LOG4CXX_EXPORT XMLDOMElement : virtual public XMLDOMN | ||||
ode | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMElement) | ||||
virtual LogString getTagName() = 0; | ||||
virtual LogString getAttribute(const LogString& nam | ||||
e) = 0; | ||||
}; | ||||
LOG4CXX_PTR_DEF(XMLDOMElement); | ||||
/** | /** | |||
The XMLDOMDocument interface represents an entire XML docume | The XMLDOMDocument interface represents an entire XML docum | |||
nt. | ent. | |||
Conceptually, it is the root of the document tree, and provi | Conceptually, it is the root of the document tree, and prov | |||
des the | ides the | |||
primary access to the document's data. | primary access to the document's data. | |||
*/ | */ | |||
class LOG4CXX_EXPORT XMLDOMDocument : virtual public XMLDOMN | class LOG4CXX_EXPORT XMLDOMDocument : virtual public XMLDOM | |||
ode | Node | |||
{ | { | |||
public: | public: | |||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMDocument) | DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMDocument) | |||
virtual void load(const String& fileName) = 0; | virtual void load(const File& fileName) = 0; | |||
virtual XMLDOMElementPtr getDocumentElement() = 0; | virtual XMLDOMElementPtr getDocumentElement() = 0; | |||
virtual XMLDOMElementPtr getElementById(const String | virtual XMLDOMElementPtr getElementById(const LogSt | |||
& tagName, | ring& tagName, | |||
const String& elementId) = 0; | const LogString& elementId) = 0; | |||
}; | }; | |||
LOG4CXX_PTR_DEF(XMLDOMDocument); | ||||
/** | /** | |||
The XMLDOMElement interface represents an element in an XML | The XMLDOMNodeList interface provides the abstraction of an | |||
document | ordered | |||
*/ | collection of nodes, without defining or constraining how t | |||
class LOG4CXX_EXPORT XMLDOMElement : virtual public XMLDOMNo | his | |||
de | collection is implemented. | |||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMElement) | ||||
virtual String getTagName() = 0; | ||||
virtual String getAttribute(const String& name) = 0; | ||||
}; | ||||
/** | XMLDOMNodeList objects in the DOM are live. | |||
The XMLDOMNodeList interface provides the abstraction of an | ||||
ordered | ||||
collection of nodes, without defining or constraining how th | ||||
is | ||||
collection is implemented. | ||||
XMLDOMNodeList objects in the DOM are live. | The items in the XMLDOMNodeList are accessible via an integ | |||
ral index, | ||||
starting from 0. | ||||
*/ | ||||
class LOG4CXX_EXPORT XMLDOMNodeList : virtual public Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMNodeList) | ||||
virtual int getLength() = 0; | ||||
virtual XMLDOMNodePtr item(int index) = 0; | ||||
}; | ||||
LOG4CXX_PTR_DEF(XMLDOMNodeList); | ||||
} // namespace helpers | ||||
} // namespace log4cxx | ||||
The items in the XMLDOMNodeList are accessible via an integr | #if defined(_MSC_VER) | |||
al index, | #pragma warning ( pop ) | |||
starting from 0. | #endif | |||
*/ | ||||
class LOG4CXX_EXPORT XMLDOMNodeList : virtual public Object | ||||
{ | ||||
public: | ||||
DECLARE_ABSTRACT_LOG4CXX_OBJECT(XMLDOMNodeList) | ||||
virtual int getLength() = 0; | ||||
virtual XMLDOMNodePtr item(int index) = 0; | ||||
}; | ||||
} // namespace helpers | ||||
}; // namespace log4cxx | ||||
#endif // _LOG4CXX_HELPERS_XML_H | #endif // _LOG4CXX_HELPERS_XML_H | |||
End of changes. 15 change blocks. | ||||
90 lines changed or deleted | 106 lines changed or added | |||
xmllayout.h | xmllayout.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_XML_LAYOUT_H | #ifndef _LOG4CXX_XML_LAYOUT_H | |||
#define _LOG4CXX_XML_LAYOUT_H | #define _LOG4CXX_XML_LAYOUT_H | |||
#include <log4cxx/layout.h> | #include <log4cxx/layout.h> | |||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace xml | namespace xml | |||
{ | { | |||
class XMLLayout; | ||||
typedef helpers::ObjectPtrT<XMLLayout> XMLLayoutPtr; | ||||
/** | /** | |||
The output of the XMLLayout consists of a series of log4j:ev | The output of the XMLLayout consists of a series of log4j:e | |||
ent | vent | |||
elements as defined in the <a | elements. It does not output a | |||
href="doc-files/log4j.dtd">log4j.dtd</a>. It does not output | complete well-formed XML file. The output is designed to b | |||
a | e | |||
complete well-formed XML file. The output is designed to be | included as an <em>external entity</em> in a separate file | |||
included as an <em>external entity</em> in a separate file t | to form | |||
o form | a correct XML file. | |||
a correct XML file. | ||||
<p>For example, if <code>abc</code> is the name of the file | <p>For example, if <code>abc</code> is the name of the file | |||
where | where | |||
the XMLLayout ouput goes, then a well-formed XML file would | the XMLLayout ouput goes, then a well-formed XML file would | |||
be: | be: | |||
<code> | <code> | |||
<?xml version="1.0" ?> | <?xml version="1.0" ?> | |||
<!DOCTYPE log4j:eventSet SYSTEM "log4j.dtd" [<!ENTITY data S YSTEM "abc">]> | <!DOCTYPE log4j:eventSet [<!ENTITY data SYSTEM "abc">]> | |||
<log4j:eventSet version="1.2" xmlns:log4j="http://jakarta.ap ache.org/log4j/"> | <log4j:eventSet version="1.2" xmlns:log4j="http://jakarta.a pache.org/log4j/"> | |||
@&data; | @&data; | |||
</log4j:eventSet> | </log4j:eventSet> | |||
</code> | </code> | |||
<p>This approach enforces the independence of the XMLLayout | <p>This approach enforces the independence of the XMLLayout | |||
and the | and the | |||
appender where it is embedded. | appender where it is embedded. | |||
*/ | */ | |||
class LOG4CXX_EXPORT XMLLayout : public Layout | class LOG4CXX_EXPORT XMLLayout : public Layout | |||
{ | { | |||
private: | private: | |||
/** | ||||
A string constant used in naming the option for sett | ||||
ing the the | ||||
location information flag. Current value of this st | ||||
ring | ||||
constant is <b>LocationInfo</b>. | ||||
*/ | ||||
static String LOCATION_INFO_OPTION; | ||||
// Print no location info by default | // Print no location info by default | |||
bool locationInfo; //= false | bool locationInfo; //= false | |||
bool properties; // = false | ||||
public: | public: | |||
DECLARE_LOG4CXX_OBJECT(XMLLayout) | DECLARE_LOG4CXX_OBJECT(XMLLayout) | |||
BEGIN_LOG4CXX_CAST_MAP() | BEGIN_LOG4CXX_CAST_MAP() | |||
LOG4CXX_CAST_ENTRY(XMLLayout) | LOG4CXX_CAST_ENTRY(XMLLayout) | |||
LOG4CXX_CAST_ENTRY_CHAIN(Layout) | LOG4CXX_CAST_ENTRY_CHAIN(Layout) | |||
END_LOG4CXX_CAST_MAP() | END_LOG4CXX_CAST_MAP() | |||
XMLLayout(); | XMLLayout(); | |||
/** | /** | |||
The <b>LocationInfo</b> option takes a boolean value | The <b>LocationInfo</b> option takes a boolean valu | |||
. By | e. By | |||
default, it is set to false which means there will b | default, it is set to false which means there will | |||
e no location | be no location | |||
information output by this layout. If the the option | information output by this layout. If the the optio | |||
is set to | n is set to | |||
true, then the file name and line number of the stat | true, then the file name and line number of the sta | |||
ement | tement | |||
at the origin of the log statement will be output. | at the origin of the log statement will be output. | |||
<p>If you are embedding this layout within a SMTPApp | <p>If you are embedding this layout within a SMTPAp | |||
ender | pender | |||
then make sure to set the | then make sure to set the | |||
<b>LocationInfo</b> option of that appender as well. | <b>LocationInfo</b> option of that appender as well | |||
*/ | . | |||
inline void setLocationInfo(bool locationInfo) | */ | |||
{ this->locationInfo = locationInfo; } | inline void setLocationInfo(bool locationInfo1) | |||
{ this->locationInfo = locationInfo1; } | ||||
/** | /** | |||
Returns the current value of the <b>LocationInfo</b> | Returns the current value of the <b>LocationInfo</b | |||
option. | > option. | |||
*/ | */ | |||
inline bool getLocationInfo() const | inline bool getLocationInfo() const | |||
{ return locationInfo; } | { return locationInfo; } | |||
/** No options to activate. */ | /** | |||
void activateOptions() { } | * Sets whether MDC key-value pairs should be outpu | |||
t, default false. | ||||
* @param flag new value. | ||||
* | ||||
*/ | ||||
inline void setProperties(bool flag) { | ||||
properties = flag; | ||||
} | ||||
/** | /** | |||
Set options | * Gets whether MDC key-value pairs should be output | |||
*/ | . | |||
virtual void setOption(const String& option, | * @return true if MDC key-value pairs are output. | |||
const String& value); | * | |||
*/ | ||||
inline bool getProperties() { | ||||
return properties; | ||||
} | ||||
/** | /** No options to activate. */ | |||
* Formats a {@link spi::LoggingEvent LoggingEvent} | void activateOptions(log4cxx::helpers::Pool& /* p * | |||
* in conformance with the log4cxx.dtd. | /) { } | |||
**/ | ||||
virtual void format(ostream& output, const spi::Logg | ||||
ingEventPtr& event) const; | ||||
/** | /** | |||
The XMLLayout prints and does not ignore exceptions. | Set options | |||
Hence the | */ | |||
return value <code>false</code>. | virtual void setOption(const LogString& option, | |||
*/ | const LogString& value); | |||
virtual bool ignoresThrowable() const | ||||
{ return false; } | ||||
}; // class XMLLayout | /** | |||
} // namespace xml | * Formats a {@link spi::LoggingEvent LoggingEvent} | |||
}; // namespace log4cxx | * in conformance with the log4cxx.dtd. | |||
**/ | ||||
virtual void format(LogString& output, | ||||
const spi::LoggingEventPtr& event, | ||||
log4cxx::helpers::Pool& p) const; | ||||
/** | ||||
The XMLLayout prints and does not ignore exceptions | ||||
. Hence the | ||||
return value <code>false</code>. | ||||
*/ | ||||
virtual bool ignoresThrowable() const | ||||
{ return false; } | ||||
}; // class XMLLayout | ||||
LOG4CXX_PTR_DEF(XMLLayout); | ||||
} // namespace xml | ||||
} // namespace log4cxx | ||||
#endif // _LOG4CXX_XML_LAYOUT_H | #endif // _LOG4CXX_XML_LAYOUT_H | |||
End of changes. 21 change blocks. | ||||
100 lines changed or deleted | 115 lines changed or added | |||
xmlsocketappender.h | xmlsocketappender.h | |||
---|---|---|---|---|
/* | /* | |||
* Copyright 2003,2004 The Apache Software Foundation. | * Licensed to the Apache Software Foundation (ASF) under one or more | |||
* | * contributor license agreements. See the NOTICE file distributed with | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | * this work for additional information regarding copyright ownership. | |||
* you may not use this file except in compliance with the License. | * The ASF licenses this file to You under the Apache License, Version 2.0 | |||
* You may obtain a copy of the License at | * (the "License"); you may not use this file except in compliance with | |||
* the License. You may obtain a copy of the License at | ||||
* | * | |||
* http://www.apache.org/licenses/LICENSE-2.0 | * http://www.apache.org/licenses/LICENSE-2.0 | |||
* | * | |||
* Unless required by applicable law or agreed to in writing, software | * Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | * distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | * See the License for the specific language governing permissions and | |||
* limitations under the License. | * limitations under the License. | |||
*/ | */ | |||
#ifndef _LOG4CXX_NET_XML_SOCKET_APPENDER_H | #ifndef _LOG4CXX_NET_XML_SOCKET_APPENDER_H | |||
#define _LOG4CXX_NET_XML_SOCKET_APPENDER_H | #define _LOG4CXX_NET_XML_SOCKET_APPENDER_H | |||
#include <log4cxx/appenderskeleton.h> | #include <log4cxx/net/socketappenderskeleton.h> | |||
#include <log4cxx/helpers/socket.h> | #include <log4cxx/helpers/writer.h> | |||
#include <log4cxx/helpers/thread.h> | ||||
namespace log4cxx | namespace log4cxx | |||
{ | { | |||
namespace helpers | namespace net | |||
{ | { | |||
class SocketOutputStream; | ||||
typedef helpers::ObjectPtrT<SocketOutputStream> SocketOutput | ||||
StreamPtr; | ||||
} | ||||
namespace net | ||||
{ | ||||
class XMLSocketAppender; | ||||
typedef helpers::ObjectPtrT<XMLSocketAppender> XMLSocketAppe | ||||
nderPtr; | ||||
/** | /** | |||
Sends {@link spi::LoggingEvent LoggingEvent} objects in XML format | Sends {@link log4cxx::spi::LoggingEvent LoggingEvent} objects in XM | |||
to a remote a log server, usually a XMLSocketNode. | L format | |||
to a remote a log server, usually a XMLSocketNode. | ||||
<p>The XMLSocketAppender has the following properties: | <p>The XMLSocketAppender has the following properties: | |||
- If sent to a XMLSocketNode, remote logging | - If sent to a XMLSocketNode, remote logging | |||
is non-intrusive as far as the log event is concerned. In ot her | is non-intrusive as far as the log event is concerned. In o ther | |||
words, the event will be logged with the same time stamp, {@link | words, the event will be logged with the same time stamp, {@link | |||
NDC NDC}, location info as if it were logged locally by | NDC NDC}, location info as if it were logged locally by | |||
the client. | the client. | |||
- XMLSocketAppenders use exclusively an XMLLayout. They ship an | - XMLSocketAppenders use exclusively an XMLLayout. They ship an | |||
XML stream representing a {@link spi::LoggingEvent LoggingEvent} ob ject | XML stream representing a {@link spi::LoggingEvent LoggingEvent} ob ject | |||
to the server side. | to the server side. | |||
- Remote logging uses the TCP protocol. Consequently, if | - Remote logging uses the TCP protocol. Consequently, if | |||
the server is reachable, then log events will eventually arrive | the server is reachable, then log events will eventually arrive | |||
at the server. | at the server. | |||
- If the remote server is down, the logging requests are | - If the remote server is down, the logging requests are | |||
simply dropped. However, if and when the server comes back up, | simply dropped. However, if and when the server comes back up, | |||
then event transmission is resumed transparently. This | then event transmission is resumed transparently. This | |||
transparent reconneciton is performed by a <em>connector</em> | transparent reconneciton is performed by a <em>connector</em> | |||
thread which periodically attempts to connect to the server. | thread which periodically attempts to connect to the server. | |||
skipping to change at line 87 | skipping to change at line 79 | |||
the presence of a connector thread. A connector thread exists | the presence of a connector thread. A connector thread exists | |||
only if the connection to the server is down. To avoid this | only if the connection to the server is down. To avoid this | |||
destruction problem, you should #close the the | destruction problem, you should #close the the | |||
<code>XMLSocketAppender</code> explicitly. See also next item. | <code>XMLSocketAppender</code> explicitly. See also next item. | |||
@n @n Long lived applications which create/destroy many | @n @n Long lived applications which create/destroy many | |||
<code>XMLSocketAppender</code> instances should be aware of this | <code>XMLSocketAppender</code> instances should be aware of this | |||
destruction problem. Most other applications can safely | destruction problem. Most other applications can safely | |||
ignore it. | ignore it. | |||
- If the application hosting the <code>XMLSocketAppender</code> | - If the application hosting the <code>XMLSocketAppender</code> | |||
exits before the <code>XMLSocketAppender</code> is closed ei ther | exits before the <code>XMLSocketAppender</code> is closed e ither | |||
explicitly or subsequent to destruction, then there might | explicitly or subsequent to destruction, then there might | |||
be untransmitted data in the pipe which might be lost. | be untransmitted data in the pipe which might be lost. | |||
@n @n To avoid lost data, it is usually sufficient to | @n @n To avoid lost data, it is usually sufficient to | |||
#close the <code>XMLSocketAppender</code> either explicitly or by | #close the <code>XMLSocketAppender</code> either explicitly or by | |||
calling the LogManager#shutdown method | calling the LogManager#shutdown method | |||
before exiting the application. | before exiting the application. | |||
*/ | */ | |||
class LOG4CXX_EXPORT XMLSocketAppender : public AppenderSkeleton | class LOG4CXX_EXPORT XMLSocketAppender : public SocketAppenderSkele | |||
{ | ton | |||
class Connector; | { | |||
friend class Connector; | public: | |||
public: | /** | |||
/** | The default port number of remote logging server (4560). | |||
The default port number of remote logging server (4560). | */ | |||
*/ | static int DEFAULT_PORT; | |||
static int DEFAULT_PORT; | ||||
/** | ||||
The default reconnection delay (30000 milliseconds or 30 sec | ||||
onds). | ||||
*/ | ||||
static int DEFAULT_RECONNECTION_DELAY; | ||||
protected: | ||||
/** | ||||
host name | ||||
*/ | ||||
String remoteHost; | ||||
/** | ||||
IP address | ||||
*/ | ||||
helpers::InetAddress address; | ||||
int port; | ||||
helpers::SocketOutputStreamPtr os; | ||||
int reconnectionDelay; | ||||
bool locationInfo; | ||||
char zeroBuffer[1024]; | ||||
/** | ||||
An event XML stream cannot exceed 1024 bytes. | ||||
*/ | ||||
static const int MAX_EVENT_LEN; | ||||
public: | ||||
DECLARE_LOG4CXX_OBJECT(XMLSocketAppender) | ||||
BEGIN_LOG4CXX_CAST_MAP() | ||||
LOG4CXX_CAST_ENTRY(XMLSocketAppender) | ||||
LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | ||||
END_LOG4CXX_CAST_MAP() | ||||
XMLSocketAppender(); | ||||
~XMLSocketAppender(); | ||||
/** | ||||
Connects to remote server at <code>address</code> and <code> | ||||
port</code>. | ||||
*/ | ||||
XMLSocketAppender(unsigned long address, int port); | ||||
/** | ||||
Connects to remote server at <code>host</code> and <code>por | ||||
t</code>. | ||||
*/ | ||||
XMLSocketAppender(const String& host, int port); | ||||
/** | ||||
Connect to the specified <b>RemoteHost</b> and <b>Port</b>. | ||||
*/ | ||||
void activateOptions(); | ||||
/** | ||||
Set options | ||||
*/ | ||||
virtual void setOption(const String& option, const S | ||||
tring& value); | ||||
/** | ||||
* Close this appender. | ||||
* | ||||
* <p>This will mark the appender as closed and call then | ||||
* #cleanUp method. | ||||
* */ | ||||
void close(); | ||||
/** | ||||
* Drop the connection to the remote host and release the und | ||||
erlying | ||||
* connector thread if it has been created | ||||
* */ | ||||
void cleanUp(); | ||||
void connect(); | ||||
virtual void append(const spi::LoggingEventPtr& event); | ||||
/** | /** | |||
* The XMLSocketAppender use an internal XMLLayout. Hence, th | The default reconnection delay (30000 milliseconds or 30 se | |||
is method | conds). | |||
* returns <code>false</code>. | */ | |||
* */ | static int DEFAULT_RECONNECTION_DELAY; | |||
bool requiresLayout() const | ||||
{ return false; } | ||||
/** | /** | |||
* The <b>RemoteHost</b> option takes a string value which sh | An event XML stream cannot exceed 1024 bytes. | |||
ould be | */ | |||
* the host name of the server where an | static const int MAX_EVENT_LEN; | |||
* XMLSocketNode is running. | ||||
* */ | ||||
inline void setRemoteHost(const String& host) | ||||
{ address = helpers::InetAddress::getByName(host); | ||||
remoteHost = host; } | ||||
/** | DECLARE_LOG4CXX_OBJECT(XMLSocketAppender) | |||
Returns value of the <b>RemoteHost</b> option. | BEGIN_LOG4CXX_CAST_MAP() | |||
*/ | LOG4CXX_CAST_ENTRY(XMLSocketAppender) | |||
inline const String& getRemoteHost() const | LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton) | |||
{ return remoteHost; } | END_LOG4CXX_CAST_MAP() | |||
/** | XMLSocketAppender(); | |||
The <b>Port</b> option takes a positive integer representing | ~XMLSocketAppender(); | |||
the port where the server is waiting for connections. | ||||
*/ | ||||
void setPort(int port) | ||||
{ this->port = port; } | ||||
/** | /** | |||
Returns value of the <b>Port</b> option. | Connects to remote server at <code>address</code> and <code | |||
*/ | >port</code>. | |||
int getPort() const | */ | |||
{ return port; } | XMLSocketAppender(helpers::InetAddressPtr address, int port | |||
); | ||||
/** | /** | |||
The <b>LocationInfo</b> option takes a boolean value. If tru | Connects to remote server at <code>host</code> and <code>po | |||
e, | rt</code>. | |||
the information sent to the remote host will include locatio | */ | |||
n | XMLSocketAppender(const LogString& host, int port); | |||
information. By default no location information is sent to t | ||||
he server. | ||||
*/ | ||||
void setLocationInfo(bool locationInfo) | ||||
{ this->locationInfo = locationInfo; } | ||||
/** | protected: | |||
Returns value of the <b>LocationInfo</b> option. | virtual void setSocket(log4cxx::helpers::SocketPtr& socket, | |||
*/ | log4cxx::helpers::Pool& p); | |||
bool getLocationInfo() const | ||||
{ return locationInfo; } | ||||
/** | virtual void cleanUp(log4cxx::helpers::Pool& p); | |||
The <b>ReconnectionDelay</b> option takes a positive integer | ||||
representing the number of milliseconds to wait between each | ||||
failed connection attempt to the server. The default value o | ||||
f | ||||
this option is 30000 which corresponds to 30 seconds. | ||||
<p>Setting this option to zero turns off reconnection | virtual int getDefaultDelay() const; | |||
capability. | ||||
*/ | ||||
void setReconnectionDelay(int reconnectionDelay) | ||||
{ this->reconnectionDelay = reconnectionDelay; } | ||||
/** | virtual int getDefaultPort() const; | |||
Returns value of the <b>ReconnectionDelay</b> option. | ||||
*/ | ||||
int getReconnectionDelay() const | ||||
{ return reconnectionDelay; } | ||||
void fireConnector(); | void append(const spi::LoggingEventPtr& event, log4cxx::hel pers::Pool& pool); | |||
private: | private: | |||
/** | log4cxx::helpers::WriterPtr writer; | |||
The Connector will reconnect when the server becomes | // prevent copy and assignment statements | |||
available | XMLSocketAppender(const XMLSocketAppender&); | |||
again. It does this by attempting to open a new con | XMLSocketAppender& operator=(const XMLSocketAppender&); | |||
nection every | }; // class XMLSocketAppender | |||
<code>reconnectionDelay</code> milliseconds. | ||||
<p>It stops trying whenever a connection is establis | ||||
hed. It will | ||||
restart to try reconnect to the server when previpou | ||||
sly open | ||||
connection is droppped. | ||||
*/ | ||||
class LOG4CXX_EXPORT Connector : public helpers::Thr | ||||
ead | ||||
{ | ||||
public: | ||||
bool interrupted; | ||||
XMLSocketAppender * socketAppender; | ||||
Connector(XMLSocketAppenderPtr socketAppende | LOG4CXX_PTR_DEF(XMLSocketAppender); | |||
r); | ||||
virtual void run(); | ||||
}; // class Connector | ||||
Connector * connector; | ||||
}; // class XMLSocketAppender | ||||
} // namespace net | } // namespace net | |||
}; // namespace log4cxx | } // namespace log4cxx | |||
#endif // _LOG4CXX_NET_XML_SOCKET_APPENDER_H | #endif // _LOG4CXX_NET_XML_SOCKET_APPENDER_H | |||
End of changes. 23 change blocks. | ||||
204 lines changed or deleted | 65 lines changed or added | |||