< prev index next >
src/hotspot/share/logging/logHandle.hpp
Print this page
rev 58036 : [mq]: asynclog
*** 1,7 ****
/*
! * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 22,31 ****
--- 22,32 ----
*
*/
#ifndef SHARE_LOGGING_LOGHANDLE_HPP
#define SHARE_LOGGING_LOGHANDLE_HPP
+ #include "logging/asynclog.hpp"
#include "logging/log.hpp"
// Wraps a Log instance and throws away the template information.
//
// This can be used to pass a Log instance as a parameter without
*** 68,89 ****
// Wraps a LogTarget instance and throws away the template information.
//
// This can be used to pass a Log instance as a parameter without
// polluting the surrounding API with template functions.
! class LogTargetHandle {
! private:
const LogLevelType _level;
LogTagSet* _tagset;
public:
! LogTargetHandle(LogLevelType level, LogTagSet* tagset) : _level(level), _tagset(tagset) {}
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
LogTargetHandle(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) :
! _level(level),
! _tagset(&LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {}
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
static LogTargetHandle create() {
return LogTargetHandle(LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>());
}
--- 69,114 ----
// Wraps a LogTarget instance and throws away the template information.
//
// This can be used to pass a Log instance as a parameter without
// polluting the surrounding API with template functions.
! template<typename D>
! class LogTargetHandleBase {
! protected :
const LogLevelType _level;
LogTagSet* _tagset;
+ LogTargetHandleBase(LogLevelType level, LogTagSet* tagset) : _level(level), _tagset(tagset) {}
+
public:
! void print(const char* fmt, ...) ATTRIBUTE_PRINTF(2, 3) {
! va_list args;
! va_start(args, fmt);
! static_cast<D*>(this)->print(fmt,args);
! va_end(args);
! }
!
! bool is_enabled() const {
! return _tagset->is_level(_level);
! }
!
! LogLevelType level() const {
! return _level;
! }
!
! LogTagSet* tagset() const {
! return _tagset;
! }
! };
!
! class LogTargetHandle : public LogTargetHandleBase<LogTargetHandle> {
! public:
! LogTargetHandle(LogLevelType level, LogTagSet* tagset) : LogTargetHandleBase<LogTargetHandle>(level, tagset) {}
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
LogTargetHandle(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) :
! LogTargetHandleBase<LogTargetHandle>(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {}
template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
static LogTargetHandle create() {
return LogTargetHandle(LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>());
}
*** 92,104 ****
va_list args;
va_start(args, fmt);
_tagset->vwrite(_level, fmt, args);
va_end(args);
}
! bool is_enabled() const {
! return _tagset->is_level(_level);
}
};
#endif // SHARE_LOGGING_LOGHANDLE_HPP
--- 117,141 ----
va_list args;
va_start(args, fmt);
_tagset->vwrite(_level, fmt, args);
va_end(args);
}
+ };
! class AsyncLogTargetHandle : public LogTargetHandleBase<AsyncLogTargetHandle> {
! public:
! template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
! AsyncLogTargetHandle(const AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) :
! LogTargetHandleBase<AsyncLogTargetHandle>(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {}
!
! template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
! static AsyncLogTargetHandle create() {
! return AsyncLogTargetHandle(AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>());
}
+ void print(const char* fmt, ...) ATTRIBUTE_PRINTF(2, 3) {
+ DEBUG_ONLY(ShouldNotReachHere());
+ }
};
+
#endif // SHARE_LOGGING_LOGHANDLE_HPP
< prev index next >