Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
34ebe17e
Commit
34ebe17e
authored
May 23, 2011
by
Stephen Morris
Browse files
[trac555] Add LoggerSpecification class and associated tests
parent
67c6c448
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/lib/log/Makefile.am
View file @
34ebe17e
...
...
@@ -14,6 +14,7 @@ liblog_la_SOURCES += logger_impl.cc logger_impl.h
liblog_la_SOURCES
+=
logger_level.h
liblog_la_SOURCES
+=
logger_level.h
liblog_la_SOURCES
+=
logger_level_impl.cc logger_level_impl.h
liblog_la_SOURCES
+=
logger_specification.h
liblog_la_SOURCES
+=
logger_support.cc logger_support.h
liblog_la_SOURCES
+=
macros.h
liblog_la_SOURCES
+=
messagedef.cc messagedef.h
...
...
src/lib/log/logger_specification.h
0 → 100644
View file @
34ebe17e
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#ifndef __LOGGER_SPECIFICATION_H
#define __LOGGER_SPEC_IFICATIONH
#include
<stdint.h>
#include
<stdlib.h>
#include
<log/logger_level.h>
#include
<log/output_option.h>
/// \brief Logger Specification
///
/// The logging configuration options are a list of logger specifications, each
/// of which represents a logger and the options for its appenders.
///
/// Unlike OutputOption (which is a struct), this contains a bit more
/// structure and is concealed in a class.
namespace
isc
{
namespace
log
{
class
LoggerSpecification
{
public:
typedef
std
::
vector
<
OutputOption
>::
iterator
iterator
;
typedef
std
::
vector
<
OutputOption
>::
const_iterator
const_iterator
;
/// \brief Constructor
///
/// \param name Name of the logger.
/// \param severity Severity at which this logger logs
/// \param dbglevel Debug level
/// \param additive true to cause message logged with this logger to be
/// passed to the parent for logging.
LoggerSpecification
(
const
std
::
string
&
name
=
""
,
isc
::
log
::
Severity
severity
=
isc
::
log
::
INFO
,
int
dbglevel
=
0
,
bool
additive
=
false
)
:
name_
(
name
),
severity_
(
severity
),
dbglevel_
(
dbglevel
),
additive_
(
additive
)
{}
/// \brief Set the name
///
/// \param name Name of the logger .
void
setName
(
const
std
::
string
&
name
)
{
name_
=
name
;
}
/// \return Return logger name
std
::
string
getName
()
const
{
return
name_
;
}
/// \brief Set the severity
///
/// \param severity New severity of the logger .
void
setSeverity
(
isc
::
log
::
Severity
severity
)
{
severity_
=
severity
;
}
/// \return Return logger severity
isc
::
log
::
Severity
getSeverity
()
const
{
return
severity_
;
}
/// \brief Set the debug level
///
/// \param dbglevel New debug level of the logger .
void
setDbglevel
(
int
dbglevel
)
{
dbglevel_
=
dbglevel
;
}
/// \return Return logger debug level
int
getDbglevel
()
const
{
return
dbglevel_
;
}
/// \brief Set the additive flag
///
/// \param additive New value of the additive flag
void
setAdditive
(
bool
additive
)
{
additive_
=
additive
;
}
/// \return Return additive flag
int
getAdditive
()
const
{
return
additive_
;
}
/// \brief Add output option
///
/// \param Option to add to the list
void
addOutputOption
(
const
OutputOption
&
option
)
{
options_
.
push_back
(
option
);
}
/// \return Iterator to start of output options
iterator
begin
()
{
return
options_
.
begin
();
}
/// \return Iterator to start of output options
const_iterator
begin
()
const
{
return
options_
.
begin
();
}
/// \return Iterator to end of output options
iterator
end
()
{
return
options_
.
end
();
}
/// \return Iterator to end of output options
const_iterator
end
()
const
{
return
options_
.
end
();
}
/// \return Number of output specification options
size_t
optionCount
()
const
{
return
options_
.
size
();
}
/// \brief Reset back to defaults
void
reset
()
{
name_
=
""
;
severity_
=
isc
::
log
::
INFO
;
dbglevel_
=
0
;
additive_
=
false
;
options_
.
clear
();
}
private:
std
::
string
name_
;
///< Logger name
isc
::
log
::
Severity
severity_
;
///< Severity for this logger
int
dbglevel_
;
///< Debug level
bool
additive_
;
///< Chaining output
std
::
vector
<
OutputOption
>
options_
;
///< Logger options
};
}
// namespace log
}
// namespace isc
#endif // __LOGGER_SPEC_IFICATIONH
src/lib/log/output_option.h
View file @
34ebe17e
...
...
@@ -15,8 +15,8 @@
#ifndef __OUTPUT_OPTION_H
#define __OUTPUT_OPTION_H
#include
<
c
std
def
>
#include
<
c
std
int
>
#include
<std
int.h
>
#include
<std
lib.h
>
#include
<string>
/// \brief Logger Output Option
...
...
@@ -54,12 +54,17 @@ struct OutputOption {
/// If console, stream on which messages are output
typedef
enum
{
STR_STD
ERR
=
0
,
// Default console stream is stderr
STR_STD
OUT
=
1
STR_STD
OUT
=
0
,
STR_STD
ERR
=
1
}
Stream
;
/// Members. The default sets everything to 0, which why the
/// stderr/stdout numbers (above) are reversed.
/// \brief Constructor
OutputOption
()
:
destination
(
DEST_CONSOLE
),
stream
(
STR_STDERR
),
flush
(
false
),
facility
(
""
),
filename
(
""
),
maxsize
(
0
),
maxver
(
0
)
{}
/// Members.
Destination
destination
;
///< Where the output should go
Stream
stream
;
///< stdout/stderr if console output
...
...
src/lib/log/tests/Makefile.am
View file @
34ebe17e
...
...
@@ -18,6 +18,7 @@ run_unittests_SOURCES += log_formatter_unittest.cc
run_unittests_SOURCES
+=
logger_level_impl_unittest.cc
run_unittests_SOURCES
+=
logger_level_unittest.cc
run_unittests_SOURCES
+=
logger_unittest.cc
run_unittests_SOURCES
+=
logger_specification_unittest.cc
run_unittests_SOURCES
+=
message_dictionary_unittest.cc
run_unittests_SOURCES
+=
message_initializer_unittest_2.cc
run_unittests_SOURCES
+=
message_initializer_unittest.cc
...
...
src/lib/log/tests/logger_specification_unittest.cc
0 → 100644
View file @
34ebe17e
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#include
<string>
#include
<gtest/gtest.h>
#include
<log/logger_specification.h>
#include
<log/output_option.h>
using
namespace
isc
::
log
;
using
namespace
std
;
/// \brief LoggerSpecification Test
class
LoggerSpecificationTest
:
public
::
testing
::
Test
{
public:
LoggerSpecificationTest
()
{}
~
LoggerSpecificationTest
()
{}
};
// Check default initialization.
TEST_F
(
LoggerSpecificationTest
,
DefaultInitialization
)
{
LoggerSpecification
spec
;
EXPECT_EQ
(
string
(
""
),
spec
.
getName
());
EXPECT_EQ
(
isc
::
log
::
INFO
,
spec
.
getSeverity
());
EXPECT_EQ
(
0
,
spec
.
getDbglevel
());
EXPECT_FALSE
(
spec
.
getAdditive
());
EXPECT_EQ
(
0
,
spec
.
optionCount
());
}
// Non-default initialization
TEST_F
(
LoggerSpecificationTest
,
Initialization
)
{
LoggerSpecification
spec
(
"alpha"
,
isc
::
log
::
ERROR
,
42
,
true
);
EXPECT_EQ
(
string
(
"alpha"
),
spec
.
getName
());
EXPECT_EQ
(
isc
::
log
::
ERROR
,
spec
.
getSeverity
());
EXPECT_EQ
(
42
,
spec
.
getDbglevel
());
EXPECT_TRUE
(
spec
.
getAdditive
());
EXPECT_EQ
(
0
,
spec
.
optionCount
());
}
// Get/Set tests
TEST_F
(
LoggerSpecificationTest
,
SetGet
)
{
LoggerSpecification
spec
;
spec
.
setName
(
"gamma"
);
EXPECT_EQ
(
string
(
"gamma"
),
spec
.
getName
());
spec
.
setSeverity
(
isc
::
log
::
FATAL
);
EXPECT_EQ
(
isc
::
log
::
FATAL
,
spec
.
getSeverity
());
spec
.
setDbglevel
(
7
);
EXPECT_EQ
(
7
,
spec
.
getDbglevel
());
spec
.
setAdditive
(
true
);
EXPECT_TRUE
(
spec
.
getAdditive
());
// Should not affect option count
EXPECT_EQ
(
0
,
spec
.
optionCount
());
}
// Check option setting
TEST_F
(
LoggerSpecificationTest
,
AddOption
)
{
OutputOption
option1
;
option1
.
destination
=
OutputOption
::
DEST_FILE
;
option1
.
filename
=
"/tmp/example.log"
;
option1
.
maxsize
=
123456
;
OutputOption
option2
;
option2
.
destination
=
OutputOption
::
DEST_SYSLOG
;
option2
.
facility
=
"LOCAL7"
;
LoggerSpecification
spec
;
spec
.
addOutputOption
(
option1
);
spec
.
addOutputOption
(
option2
);
EXPECT_EQ
(
2
,
spec
.
optionCount
());
// Iterate through them
LoggerSpecification
::
const_iterator
i
=
spec
.
begin
();
EXPECT_EQ
(
OutputOption
::
DEST_FILE
,
i
->
destination
);
EXPECT_EQ
(
string
(
"/tmp/example.log"
),
i
->
filename
);
EXPECT_EQ
(
123456
,
i
->
maxsize
);
++
i
;
EXPECT_EQ
(
OutputOption
::
DEST_SYSLOG
,
i
->
destination
);
EXPECT_EQ
(
string
(
"LOCAL7"
),
i
->
facility
);
++
i
;
EXPECT_TRUE
(
i
==
spec
.
end
());
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment