Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
f560f338
Commit
f560f338
authored
Dec 16, 2016
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Polish contribution
Closes gh-7219
parent
60e054d0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
3 deletions
+55
-3
LoggersEndpointMBean.java
...ework/boot/actuate/endpoint/jmx/LoggersEndpointMBean.java
+8
-3
EndpointMBeanExporterTests.java
...boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java
+47
-0
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/endpoint/jmx/LoggersEndpointMBean.java
View file @
f560f338
...
...
@@ -24,6 +24,8 @@ import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import
org.springframework.boot.logging.LogLevel
;
import
org.springframework.jmx.export.annotation.ManagedAttribute
;
import
org.springframework.jmx.export.annotation.ManagedOperation
;
import
org.springframework.jmx.export.annotation.ManagedResource
;
import
org.springframework.util.Assert
;
/**
* Adapter to expose {@link LoggersEndpoint} as an {@link MvcEndpoint}.
...
...
@@ -31,6 +33,7 @@ import org.springframework.jmx.export.annotation.ManagedOperation;
* @author Vedran Pavic
* @since 1.5.0
*/
@ManagedResource
public
class
LoggersEndpointMBean
extends
EndpointMBean
{
public
LoggersEndpointMBean
(
String
beanName
,
Endpoint
<?>
endpoint
,
...
...
@@ -38,19 +41,21 @@ public class LoggersEndpointMBean extends EndpointMBean {
super
(
beanName
,
endpoint
,
objectMapper
);
}
@ManagedAttribute
(
description
=
"Get levels for all known loggers"
)
@ManagedAttribute
(
description
=
"Get l
og l
evels for all known loggers"
)
public
Object
getLoggers
()
{
return
convert
(
getEndpoint
().
invoke
());
}
@ManagedOperation
(
description
=
"Get level for a given logger"
)
@ManagedOperation
(
description
=
"Get l
og l
evel for a given logger"
)
public
Object
getLogger
(
String
loggerName
)
{
return
convert
(
getEndpoint
().
invoke
(
loggerName
));
}
@ManagedOperation
(
description
=
"Set log level for a given logger"
)
public
void
setLogLevel
(
String
loggerName
,
String
logLevel
)
{
getEndpoint
().
setLogLevel
(
loggerName
,
LogLevel
.
valueOf
(
logLevel
));
Assert
.
notNull
(
logLevel
,
"LogLevel must not be null"
);
LogLevel
level
=
LogLevel
.
valueOf
(
logLevel
.
toUpperCase
());
getEndpoint
().
setLogLevel
(
loggerName
,
level
);
}
@Override
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/endpoint/jmx/EndpointMBeanExporterTests.java
View file @
f560f338
...
...
@@ -26,18 +26,23 @@ import java.util.List;
import
java.util.Map
;
import
java.util.Properties
;
import
javax.management.MBeanException
;
import
javax.management.MBeanInfo
;
import
javax.management.MalformedObjectNameException
;
import
javax.management.ObjectName
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
org.junit.After
;
import
org.junit.Rule
;
import
org.junit.Test
;
import
org.junit.rules.ExpectedException
;
import
org.springframework.beans.MutablePropertyValues
;
import
org.springframework.beans.factory.config.ConstructorArgumentValues
;
import
org.springframework.beans.factory.support.RootBeanDefinition
;
import
org.springframework.boot.actuate.endpoint.AbstractEndpoint
;
import
org.springframework.boot.actuate.endpoint.LoggersEndpoint
;
import
org.springframework.boot.logging.logback.LogbackLoggingSystem
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.support.GenericApplicationContext
;
import
org.springframework.jmx.export.MBeanExporter
;
...
...
@@ -45,15 +50,21 @@ import org.springframework.jmx.support.ObjectNameManager;
import
org.springframework.util.ObjectUtils
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
hamcrest
.
Matchers
.
containsString
;
import
static
org
.
junit
.
internal
.
matchers
.
ThrowableMessageMatcher
.
hasMessage
;
/**
* Tests for {@link EndpointMBeanExporter}
*
* @author Christian Dupuis
* @author Andy Wilkinson
* @author Stephane Nicoll
*/
public
class
EndpointMBeanExporterTests
{
@Rule
public
ExpectedException
thrown
=
ExpectedException
.
none
();
GenericApplicationContext
context
=
null
;
@After
...
...
@@ -253,6 +264,42 @@ public class EndpointMBeanExporterTests {
assertThat
(((
List
<?>)
response
).
get
(
0
)).
isInstanceOf
(
Long
.
class
);
}
@Test
public
void
loggerEndpointLowerCaseLogLevel
()
throws
Exception
{
MBeanExporter
mbeanExporter
=
registerLoggersEndpoint
();
Object
response
=
mbeanExporter
.
getServer
().
invoke
(
getObjectName
(
"loggersEndpoint"
,
this
.
context
),
"setLogLevel"
,
new
Object
[]{
"com.example"
,
"trace"
},
new
String
[]{
String
.
class
.
getName
(),
String
.
class
.
getName
()});
assertThat
(
response
).
isNull
();
}
@Test
public
void
loggerEndpointUnknownLogLevel
()
throws
Exception
{
MBeanExporter
mbeanExporter
=
registerLoggersEndpoint
();
this
.
thrown
.
expect
(
MBeanException
.
class
);
this
.
thrown
.
expectCause
(
hasMessage
(
containsString
(
"No enum constant"
)));
this
.
thrown
.
expectCause
(
hasMessage
(
containsString
(
"LogLevel.INVALID"
)));
mbeanExporter
.
getServer
().
invoke
(
getObjectName
(
"loggersEndpoint"
,
this
.
context
),
"setLogLevel"
,
new
Object
[]{
"com.example"
,
"invalid"
},
new
String
[]{
String
.
class
.
getName
(),
String
.
class
.
getName
()});
}
private
MBeanExporter
registerLoggersEndpoint
()
{
this
.
context
=
new
GenericApplicationContext
();
this
.
context
.
registerBeanDefinition
(
"endpointMbeanExporter"
,
new
RootBeanDefinition
(
EndpointMBeanExporter
.
class
));
RootBeanDefinition
bd
=
new
RootBeanDefinition
(
LoggersEndpoint
.
class
);
ConstructorArgumentValues
values
=
new
ConstructorArgumentValues
();
values
.
addIndexedArgumentValue
(
0
,
new
LogbackLoggingSystem
(
getClass
().
getClassLoader
()));
bd
.
setConstructorArgumentValues
(
values
);
this
.
context
.
registerBeanDefinition
(
"loggersEndpoint"
,
bd
);
this
.
context
.
refresh
();
return
this
.
context
.
getBean
(
EndpointMBeanExporter
.
class
);
}
private
ObjectName
getObjectName
(
String
beanKey
,
GenericApplicationContext
context
)
throws
MalformedObjectNameException
{
return
getObjectName
(
"org.springframework.boot"
,
beanKey
,
false
,
context
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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