SpringBoot配置log4j输出日志的案例讲解

 更新时间:2022年11月24日 11:10:34   作者:qq_25073223  
这篇文章主要介绍了SpringBoot配置log4j输出日志的案例讲解,springboot框架中默认使用logback进行日志输出,当然它也可以配置其它的日志框架,需要的朋友可以参考下

下文笔者讲述SpringBoot配置log4j的方法分享,如下所示

SpringBoot日志输出

springboot框架中默认使用logback进行日志输出
当然它也可以配置其它的日志框架

SpringBoot配置log4j

Springboot配置log4j的方法:

   1.添加log4j.properties配置文件
   2.初始化配置文件

配置log4j文件

 添加log4j.properties配置文件
 配置文件添加的路径
   在工程src/main/resources下

文件内容

#log4j.rootLogger=CONSOLE,info,error,DEBUG
log4j.rootLogger=info,error,CONSOLE,DEBUG

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender     
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout     
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n     
      
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout     
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info   
log4j.appender.info.append=true   
#log4j.appender.info.File=/home/java265project/logs/info/api_services_info
log4j.appender.info.File=/Users/java265project/logs/info/api_services_info

log4j.logger.error=error  
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout     
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error   
log4j.appender.error.append=true   
#log4j.appender.error.File=/home/java265project/logs/error/api_services_error
log4j.appender.error.File=/Users/java265project/logs/error/api_services_error

log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout     
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n  
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG   
log4j.appender.DEBUG.append=true   
#log4j.appender.DEBUG.File=/home/java265project/logs/debug/api_services_debug
log4j.appender.DEBUG.File=/Users/java265project/logs/debug/api_services_debug

### Debug
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
注意事项:
    1.log4j.properties文件中
      当部署线上环境,需要释放掉注释语句,并注释线下配置语句。
      #log4j.appender.info.File=/home/java265project/logs/info/api_services_info
     log4j.appender.info.File=/Users/java265project/logs/info/api_services_info
    2.日志配置涉及三个级别:info、error、debug

例:

初始化log4j配置

springboot启动是通过main入口函数
需在main入口函数中设置log4j初始化

public class App {
	private static final Logger logger = LoggerFactory.getLogger(App.class);	
	@Value("${server.port}")
	private int port;
	@Value("${server.sessionTimeout}")
	private int sessionTimeout;
	static {
		try{
		   // 初始化log4j
		   String log4jPath = "";
		   if(Constant.LOG_MODE == 1){
			   // 配置线上地址
			   log4jPath = App.class.getClassLoader().getResource("").getPath()+"java265project/config/log4j.properties";
			   logger.info("Log4j线上生产模式初始化。。。");	
		   }else{
			   // 配置本地地址
			   log4jPath = App.class.getClassLoader().getResource("").getPath()+"log4j.properties";
			   logger.info("Log4j线下开发模式初始化。。。");	
		   }		   		   
		   logger.info("初始化Log4j。。。。");	
		   logger.info("path is "+ log4jPath);	
		   PropertyConfigurator.configure(log4jPath);
		}catch (Exception e){			  
			  logger.error(e.toString());	
		}
    }

	public static void main(String[] args) {
		
		final String[] temp = args;
		
		logger.info("oops: main入口函数编码-" +System.getProperty("file.encoding"));
		
		if(Constant.LOG_MODE == 0){
			SpringApplication.run(App.class, args);
			logger.info("oops: 线下开发测试");		
		}else{
			logger.info("oops:" + args[0]);		
		}
							
		if(ArrayUtils.isNotEmpty(args))
	    {
	        // 如果你的应用程序,运行后不自动退出,那么处理start时不要执行正常的代码,否则在部署测试 appctl.sh 的时候,会一直等待进程退出
	        if(args[0].equals("startup"))
	        {	            	            
	        	new Thread(
	        		new Runnable(){
	        			public void run(){
	        				System.out.println("启动Mythread子线程");
	        				logger.info("启动Mythread子线程");	
	        				SpringApplication.run(App.class, temp);		        	        
	        			}
	        	}).start();
	        	
	        	System.out.println("program startup");
	    		logger.info("program startup");		    		
	        }else if(args[0].equals("stop"))
	        {
	            System.out.println("program stop");
	            logger.info("program stop");		            
	        }else if(args[0].equals("restart"))
	        {
	            System.out.println("program restart");
	            logger.info("program restart");	
	        }else if(args[0].equals("status"))
	        {
	            System.out.println("program status");
	            logger.info("program status");	
	        }
	    }		 
	}

优化配置

可对log4j.properties文件进行调整
使其配置更简单

log4j.rootLogger=${log.root}

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
      
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = info
log4j.appender.info.append=true
log4j.appender.info.File=${log.base}/java265project/logs/info/api_services_info

log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = error
log4j.appender.error.append=true
log4j.appender.error.File=${log.base}/java265project/logs/error/api_services_error

log4j.logger.DEBUG=DEBUG
log4j.appender.DEBUG=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DEBUG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUG.layout.ConversionPattern=%d{yyyy-MM-dd-HH-mm} [%t] [%c] [%p] - %m%n
log4j.appender.DEBUG.datePattern='.'yyyy-MM-dd
log4j.appender.DEBUG.Threshold = DEBUG
log4j.appender.DEBUG.append=true
log4j.appender.DEBUG.File=${log.base}/java265project/logs/debug/api_services_debug

### Debug
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

与之相应的main函数新增如下代码,同时去掉static代码块:

System.setProperty("log.root",Constant.LOG_ROOT_DAILY);			
System.setProperty("log.base",Constant.LOG_PATH_DAILY);

到此这篇关于SpringBoot配置log4j输出日志的案例讲解的文章就介绍到这了,更多相关SpringBoot配置log4j输出日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Java中的URL和URLConnection

    浅谈Java中的URL和URLConnection

    这篇文章主要介绍了浅谈Java中的URL和URLConnection,URL代表的是一种资源,它使用的是统一资源定位格式, 其实我们还可以用URL来构造对象的,java中有大量的构造函数允许使用一个个的分串来指定URL,需要的朋友可以参考下
    2023-08-08
  • Struts2实现生成动态验证码并验证实例代码

    Struts2实现生成动态验证码并验证实例代码

    这篇文章主要介绍了Struts2实现生成动态验证码并验证实例代码的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • SpringIOC容器Bean的作用域及生命周期实例

    SpringIOC容器Bean的作用域及生命周期实例

    这篇文章主要为大家介绍了SpringIOC容器Bean的作用域及生命周期实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • JDK常用命令jps jinfo jstat的具体说明与示例

    JDK常用命令jps jinfo jstat的具体说明与示例

    JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jinfo、jstat等小巧的工具,本文章希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解
    2021-09-09
  • 关于Java中的mysql时区问题详解

    关于Java中的mysql时区问题详解

    这篇文章主要给大家介绍了关于Java中mysql时区问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Java框架学习Struts2复选框实例代码

    Java框架学习Struts2复选框实例代码

    这篇文章主要介绍了Java框架学习Struts2复选框实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • spring注入在有常量的情况下使用@AllArgsConstructor操作

    spring注入在有常量的情况下使用@AllArgsConstructor操作

    这篇文章主要介绍了spring注入在有常量的情况下使用@AllArgsConstructor操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot中application.yml多环境生效规则说明

    springboot中application.yml多环境生效规则说明

    这篇文章主要介绍了springboot中application.yml多环境生效规则说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 深入Java不可变类型的详解

    深入Java不可变类型的详解

    本篇文章是Java中的不可变类型进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 全面解析Java中的注解与注释

    全面解析Java中的注解与注释

    这篇文章主要介绍了Java中的注解与注释,简单来说注解以@符号开头而注释被包含在/***/符号中,各自具体的作用则来看本文详解,需要的朋友可以参考下
    2016-05-05

最新评论