SpringBoot + Log4j2 + рдорд╛рд╡реЗрди рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓реЙрдЧрд┐рдВрдЧ

рдирдорд╕реНрдХрд╛рд░, рдкреНрд░рд┐рдп рдЦрдмреНрд░реЛрд╡рд┐рддреНрд╕ред


рд▓реЗрдЦ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдФрд░, рд╢рд╛рдпрдж, рдпрд╣ рдореБрдЭреЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП StackOverFlow рдФрд░ рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рдХрдИ рдШрдВрдЯреЗ рдмрдЪрд╛рдПрдЧрд╛, рдЬреЛ рдЦреБрдж рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реИ - рдХрдВрд╕реЛрд▓, рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдореЗрдВред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХрд╛рд░реНрдп рд╣рдореЗрд╢рд╛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рд╡реЗрд╢ рдкрд░ рд▓реЙрдЧ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЙрдЧ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред logstash рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдФрд░ рдПрдХ рджреВрд░рд╕реНрде рд▓рд┐рдирдХреНрд╕ рдорд╢реАрди рдкрд░ рд╡рд┐рдВрдбреЛрдЬ рд╣реИ, рддреЛ рдЗрд╕ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реНрдерд╛рди рдкрддрд╛ рдЕрд▓рдЧ рд╣реИред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдИ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рдпрд╛рдж рд░рдЦрдиреЗ рдФрд░ рдЕрдкреЗрдВрдбрд┐рдХреНрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореИрдВрдиреЗ Log4j2 рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рддрд╛рдХрд┐, рдЪрдпрдирд┐рдд рдорд╛рд╡реЗрди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреЗрд╡рд▓ рд╕рд╣реА рдРрдкреЗрдВрдбрд░реНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рдПрдВред


рдиреАрдЪреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ + рдорд╛рд╡реЗрди + рд▓реЙрдЧ 4 рдЬреЗ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд▓реЙрдЧрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рджреЛ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдВрдЧреЗ: CONSOLE рдФрд░ SOCKETред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдорд╛рд╡реЗрди рд╡рд┐рдиреНрдпрд╛рд╕ (pom.xml) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВрдЧреЗ:
рд╕рдВрдкреВрд░реНрдг pom.xml рд╕реНрддрд░ рдкрд░ рдЪрд░ рдореЗрдВ, logstash-appender рдХреЗ рд▓рд┐рдП рд╣реЛрд╕реНрдЯ рдкрддрд╛ рдЬреЛрдбрд╝реЗрдВ:


<properties> <logstash.host>logstashcsm.example.ru</logstash.host> </properties> 

рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:


 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> </dependencies> 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд▓реЙрдЧрд┐рдВрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд╡реЗрдм рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВред


рдЬреБрдбрд╝реЗ рд╣реБрдП рдРрдкреЗрдВрдбрд░реЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╡реЗрди рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реЗрдЯ рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрддрд░ рдкрд░, рд╣рдо рдЪрд░ logstash.port, logger.console.tresholdFilter, logger.socket.tresholdFilter рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред


 <profiles> <profile> <id>local</id> <properties> <logstash.port>10000</logstash.port> <logger.console.tresholdFilter>ALL</logger.console.tresholdFilter> <logger.socket.tresholdFilter>OFF</logger.socket.tresholdFilter> </properties> </profile> <profile> <id>dev</id> <properties> <logstash.port>10001</logstash.port> <logger.console.tresholdFilter>OFF</logger.console.tresholdFilter> <logger.socket.tresholdFilter>ALL</logger.socket.tresholdFilter> </properties> </profile> </profiles> 

logstash.port - рдЬрд┐рд╕ рдкреЛрд░реНрдЯ рдореЗрдВ рд▓реЙрдЧ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рд╣реИред
logger.console.tresholdFilter - рдорд╛рди рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд▓реЙрдЧ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реНрддрд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЗ рд▓реЙрдЧ рд░рд┐рдХреЙрд░реНрдб рдХрдВрд╕реЛрд▓ рдРрдкреЗрдВрдбрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
logger.socket.tresholdFilter - рдорд╛рди рд▓реЙрдЧ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╕реНрддрд░ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрддрд░ - рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдЙрдкрд╛рдзреАрдХреНрд╖рдХ рдХреЛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдЕрднрд┐рд▓реЗрдЦ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдЕрдм рд╣рдореЗрдВ application.properties рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ Log4j2.xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╣рдо pom.xml рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЪрд░ рдХреЗ рдорд╛рди рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдВ:


logstash.host=@logstash.host@
logstash.port=@logstash.port@
logger.console.tresholdFilter=@logger.console.tresholdFilter@
logger.socket.tresholdFilter=@logger.socket.tresholdFilter@


рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо Log4j2.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрд╡рдпрдВ Log4j2 рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ:


 <?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <Property name="socket.host">${bundle:application:logstash.host}</Property> <Property name="socket.port">${bundle:application:logstash.port}</Property> <Property name="console.thresholdFilter">${bundle:application:logger.console.tresholdFilter}</Property> <Property name="socket.thresholdFilter">${bundle:application:logger.socket.tresholdFilter}</Property> </Properties> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <ThresholdFilter level="${console.thresholdFilter}"/> <PatternLayout pattern="%d %-5p [%t] %c{10} - %m%n"/> </Console> <Socket name="SOCKET" host="${socket.host}" port="${socket.port}" immediateFlush="true"> <ThresholdFilter level="${socket.thresholdFilter}"/> <JSONLayout eventEol="true" compact="true"/> </Socket> <Async name="ASYNC"> <AppenderRef ref="CONSOLE"/> <AppenderRef ref="SOCKET"/> </Async> </Appenders> <Loggers> <Logger name="ru.example" level="debug" additivity="false"> <AppenderRef ref="ASYNC"/> </Logger> <Root level="error"> <AppenderRef ref="ASYNC"/> </Root> </Loggers> </Configuration> 

рдЕрдм, рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 private static Logger logger = LoggerFactory.getLogger(YourClass.class); 

рдФрд░ рдЙрд╕рдХреА рдУрд░ рдореБрдбрд╝реЗрдВ:


 logger.info("   "); 

рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рд▓реЙрдЧрд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдорд╛рд╡реЗрди рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ log4j2.xml рдлрд╝рд╛рдЗрд▓ рдХреА рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рдореЗрдВ, рджреЛ рд▓реЙрдЧрд░реНрд╕ рдХреЛ ru.example - ru.example рдФрд░ root , рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЗрд╡реЗрдВрдЯ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░ рд╣реИрдВред рдкрд╣рд▓рд╛ ru.example.* рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ ru.example.* рдкреИрдХреЗрдЬ рдФрд░ DEBUG рд╕реНрддрд░ рд╕реЗ рд╕рдм рдХреБрдЫ ru.example.* , рдФрд░ root рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди ERROR рд╕реНрддрд░ рд╕реЗред
рдЙрд╕реА рд╕рдордп, рддрд╛рдХрд┐ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдХрд┐рдпрд╛ рдЬрд╛рдП, additivity="false" рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi413091/


All Articles