1 #if !defined (LOG_MESSAGE_RECEIVER_CPP)
2 #define LOG_MESSAGE_RECEIVER_CPP
4 #include "ace/Log_Msg.h"
5 #include "Log_Message_Receiver.h"
7 // Type based log message receiver
8 template<ACE_SYNCH_DECL
> void
9 Static_Log_Message_Receiver
<ACE_SYNCH_USE
>::log_record (const ACE_TCHAR
*hostname
,
10 ACE_Log_Record
&record
)
12 #if defined (ACE_HAS_THREADS)
13 static ACE_SYNCH_MUTEX_T lock_
;
14 ACE_GUARD (ACE_SYNCH_MUTEX_T
, guard
, lock_
);
15 #endif /* ACE_HAS_THREADS */
17 record
.print (hostname
,
18 ACE_Log_Msg::instance ()->flags (),
22 template<ACE_SYNCH_DECL
> void
23 Static_Log_Message_Receiver
<ACE_SYNCH_USE
>::log_output (const ACE_TCHAR
*hostname
,
24 ACE_Log_Record
&record
,
29 #if defined (ACE_HAS_THREADS)
30 static ACE_SYNCH_MUTEX_T lock_
;
31 ACE_GUARD (ACE_SYNCH_MUTEX_T
, guard
, lock_
);
32 #endif /* ACE_HAS_THREADS */
33 record
.print (hostname
,
34 ACE_Log_Msg::instance ()->flags (),
39 #if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
40 template<ACE_SYNCH_DECL
>
41 ACE_SYNCH_MUTEX_T Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::copy_lock_
;
43 static ACE_SYNCH_MUTEX global_copy_lock_
;
44 #endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
46 template<ACE_SYNCH_DECL
>
47 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::Log_Message_Receiver_Impl (void)
52 template<ACE_SYNCH_DECL
>
53 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
> *
54 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::create (void)
56 return new Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>;
59 template<ACE_SYNCH_DECL
>
60 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
> *
61 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::attach (Log_Message_Receiver_Impl
<ACE_SYNCH_USE
> *body
)
63 ACE_ASSERT (body
!= 0);
65 #if defined (ACE_HAS_THREADS)
66 # if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
67 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX_T
, guard
, copy_lock_
, 0);
69 // Use the "body"s print lock as copy lock.
70 ACE_GUARD_RETURN (ACE_SYNCH_MUTEX
, guard
, global_copy_lock_
, 0);
71 # endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
72 #endif /* ACE_HAS_THREADS */
77 template<ACE_SYNCH_DECL
> void
78 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::detach (Log_Message_Receiver_Impl
<ACE_SYNCH_USE
> *body
)
80 ACE_ASSERT (body
!= 0);
82 #if defined (ACE_HAS_THREADS)
83 # if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
84 ACE_GUARD (ACE_SYNCH_MUTEX_T
, guard
, copy_lock_
);
86 // Use the "body"s print lock as copy lock.
87 ACE_GUARD (ACE_SYNCH_MUTEX
, guard
, global_copy_lock_
);
88 # endif /* ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES */
89 #endif /* ACE_HAS_THREADS */
90 if (body
->count_
-- == 0)
94 // Type based log message receiver
95 template<ACE_SYNCH_DECL
> void
96 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::log_record (const ACE_TCHAR
*hostname
,
97 ACE_Log_Record
&record
)
99 ACE_GUARD (ACE_SYNCH_MUTEX_T
, guard
, print_lock_
);
100 record
.print (hostname
,
101 ACE_Log_Msg::instance ()->flags (),
105 template<ACE_SYNCH_DECL
> void
106 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::log_output (const ACE_TCHAR
*hostname
,
107 ACE_Log_Record
&record
,
112 ACE_GUARD (ACE_SYNCH_MUTEX_T
, guard
, print_lock_
);
113 record
.print (hostname
,
114 ACE_Log_Msg::instance ()->flags (),
119 template<ACE_SYNCH_DECL
>
120 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::~Log_Message_Receiver_Impl (void)
122 ACE_ASSERT (count_
== 0 - 1);
125 template<ACE_SYNCH_DECL
>
126 Log_Message_Receiver
<ACE_SYNCH_USE
>::Log_Message_Receiver (void)
127 : receiver_impl_ (Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::create ())
129 ACE_ASSERT (receiver_impl_
!= 0);
132 template<ACE_SYNCH_DECL
>
133 Log_Message_Receiver
<ACE_SYNCH_USE
>::Log_Message_Receiver
134 (Log_Message_Receiver
<ACE_SYNCH_USE
> const &rhs
)
135 : receiver_impl_ (Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::attach (rhs
.receiver_impl_
))
137 ACE_ASSERT (receiver_impl_
!= 0);
140 // Type based log message receiver
141 template<ACE_SYNCH_DECL
> void
142 Log_Message_Receiver
<ACE_SYNCH_USE
>::log_record(const ACE_TCHAR
*hostname
,
143 ACE_Log_Record
&record
)
145 ACE_ASSERT (receiver_impl_
!= 0);
146 receiver_impl_
->log_record (hostname
, record
);
149 template<ACE_SYNCH_DECL
> void
150 Log_Message_Receiver
<ACE_SYNCH_USE
>::log_output(const ACE_TCHAR
*hostname
,
151 ACE_Log_Record
&record
,
154 ACE_ASSERT (receiver_impl_
!= 0);
155 receiver_impl_
->log_output (hostname
, record
, outputfile
);
158 template<ACE_SYNCH_DECL
>
159 Log_Message_Receiver
<ACE_SYNCH_USE
>::~Log_Message_Receiver (void)
161 ACE_ASSERT (receiver_impl_
!= 0);
162 Log_Message_Receiver_Impl
<ACE_SYNCH_USE
>::detach (receiver_impl_
);
165 #endif /* LOG_MESSAGE_RECEIVER_CPP */