您的当前位置:首页正文

SpringbootLogback日志使用,SpringbootLogback详细配置和日志分割

来源:九壹网
SpringbootLogback⽇志使⽤,SpringbootLogback详细配置和

⽇志分割

Springboot Logback⽇志使⽤,Springboot Logback详细配置和⽇志分割Springboot Logback springProperty使⽤,Springboot Logback区分环境

================================©Copyright 蕃薯耀 2020-12-23

⼀、引⼊Logback⽇志的maven依赖:logback-classic

ch.qos.logback logback-classic

⼆、Springboot Logback 区分环境配置:1、application.properties:

spring.profiles.active=dev

server.port=6000

server.servlet.context-path=/logback

2、application-dev.properties:

logging.config=classpath:logback-spring-dev.xml

3、application-test.properties:

logging.config=classpath:logback-spring-test.xml

4、application-prod.properties:

logging.config=classpath:logback-spring-prod.xml

通过logging.config设置Springboot使⽤的⽇志配置⽂件,这样每个环境都可以使⽤不能的配置。如果不区分环境,可以直接命名为:logback-spring.xml,这样Springboot会⾃动加载。

三、Springboot Logback.xml 配置⽂件详细设置:1、logback-spring-dev.xml

[${springProfilesActive}]${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/info.log

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-info.log

${logDays}

[${springProfilesActive}]${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/warn.log

WARN

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-warn.log

${logDays}

[${springProfilesActive}]${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/error.log

ERROR

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-error.log

${logDays}

[${springProfilesActive}]${log_style}

2、logback-spring-test.xml

${LOG_HOME}/${projectName}/${weblogicName}/info.log

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-info.log

${logDays}

[${springProfilesActive}]${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/warn.log

WARN

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-warn.log

${logDays}

[${springProfilesActive}]${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/error.log

ERROR

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-error.log

${logDays}

[${springProfilesActive}]${log_style}

3、logback-spring-prod.xml

${LOG_HOME}/${projectName}/${weblogicName}/info.log

${LOG_HOME}/${projectName}/${weblogicName}/%d{yyyy-MM-dd}-info.log

${logDays}

${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/warn.log

WARN

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/${history}/%d{yyyy-MM-dd}-warn.log

${logDays}

${log_style}

${LOG_HOME}/${projectName}/${weblogicName}/error.log

ERROR

ACCEPT DENY

${LOG_HOME}/${projectName}/${weblogicName}/%d{yyyy-MM-dd}-error.log

${logDays}

${log_style}

四、logback监听器的使⽤(LogbackStartupListener.java)在logback的xml配置⽂件中,有⼀个监听器的配置:

类⽂件:

package com.lqy.log.listener;

import org.springframework.util.StringUtils;

import ch.qos.logback.classic.Level;import ch.qos.logback.classic.Logger;

import ch.qos.logback.classic.LoggerContext;

import ch.qos.logback.classic.spi.LoggerContextListener;import ch.qos.logback.core.Context;

import ch.qos.logback.core.spi.ContextAwareBase;import ch.qos.logback.core.spi.LifeCycle;

public class LogbackStartupListener extends ContextAwareBase implements LoggerContextListener, LifeCycle {

@Override

public void start() {

//log.info(\"LogbackStartupListener start()\");

String userDir = System.getProperty(\"user.dir\"); String osName = System.getProperty(\"os.name\"); String osVersion = System.getProperty(\"os.version\"); String javaVersion = System.getProperty(\"java.version\");

String weblogicName = System.getProperty(\"weblogic.Name\");

System.out.println(\"userDir===\" + userDir); System.out.println(\"osName===\" + osName); System.out.println(\"osVersion===\" + osVersion); System.out.println(\"javaVersion===\" + javaVersion);

System.out.println(\"weblogicName===\" + weblogicName);

if(StringUtils.isEmpty(weblogicName)) { weblogicName = \"notWeblogic\"; }

System.out.println(\"weblogicName2===\" + weblogicName);

Context context = getContext();

context.putProperty(\"weblogicName\ }

@Override

public void stop() {

//log.info(\"LogbackStartupListener stop()\"); }

@Override

public boolean isStarted() { return false; }

@Override

public boolean isResetResistant() { return false; }

@Override

public void onStart(LoggerContext context) { //log.info(\"LogbackStartupListener onStart()\"); }

@Override

public void onReset(LoggerContext context) { //log.info(\"LogbackStartupListener onReset()\"); }

@Override

public void onStop(LoggerContext context) { //log.info(\"LogbackStartupListener onStop()\"); }

@Override

public void onLevelChange(Logger logger, Level level) { //log.info(\"LogbackStartupListener onLevelChange()\"); }}

1、为什么要使⽤监听器:

通过监听器,可以往logback的context注⼊变量,如系统环境变量(os.name),这样在配置⽂件就能通过${os.name}直接引⼊使⽤变量的值。

如⽰例中引⼊了weblogic容器的服务名称:weblogic.Name

String weblogicName = System.getProperty(\"weblogic.Name\");context.putProperty(\"weblogicName\

xml引⼊使⽤就是:${weblogicName}使⽤如下:

${LOG_HOME}/${projectName}/${weblogicName}/info.log

五、logback通过springProperty标签使⽤Springboot配置⽂件中的变量1、logback引⼊Springboot配置⽂件的环境变量name:⾃定义别名

source:对应Springboot配置⽂件中的属性名

使⽤:

${springProfilesActive}⽰例:

[${springProfilesActive}]${log_style}

2、logback使⽤springProperty标签可能存在的问题报错:

no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]详细错误如下:

Logging system failed to initialize using configuration from 'classpath:logback-test.xml'java.lang.IllegalStateException: Logback configuration error detected:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@13:83 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]] at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithSpecificConfig(AbstractLoggingSystem.java:66) at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:57)

at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118)

at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:310) at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:281)

at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)

at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:80) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) at com.lqy.log.LogbackApplication.main(LogbackApplication.java:10) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498)

at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)

[classpath:logback-test.xml][notWeblogic][ERROR] [2020-12-22 10:39:29.409] org.springframework.boot.SpringApplication.reportFailure:837Application run failed

原因:

logback最开始使⽤的命名是:logback-test.xml,这样会导致出错。

SpringBoot 会在 classpath 下查找是否有logback的 jar包,存在jar包,然后检查配置⽂件,包含 logback-test.groovy、logback-test.xml、logback.groovy 或者 logback.xml,如果都找不到的话,才会加载项⽬路径下的 logback-spring.xml。

如果命名为logback-test.xml,logback会优先SpringBoot加载完,导致加载不到SpringBoot配置⽂件的变量⽽报错。

解决⽅案:⽅案⼀(⾸选):

简单的解决⽅法,就是重命名,改成:logback-spring-test.xml ⽅案⼆:

不使⽤springProperty标签,通过LogbackStartupListener注⼊相关的变量,上⾯已经说到。

六、测试logback⽇志:

import java.util.Date;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RequestMapping(\"/\")@RestController

public class LogController {

private static final Logger log = LoggerFactory.getLogger(LogController.class);

@RequestMapping(\"log\") public String log() {

String time = new Date().getTime() + \"\"; log.info(time);

log.info(\"{} + {} is {}\

log.warn(\"{} + {} is not {}\

String weblogicName = System.getProperty(\"weblogic.Name\"); log.error(\"weblogicName==={}\

return \"ok,时间=\" + time + \",weblogicName=\" + weblogicName; }}

(如果⽂章对您有帮助,欢迎捐赠,^_^)================================©Copyright 蕃薯耀 2020-12-23

因篇幅问题不能全部显示,请点此查看更多更全内容

Top