spring boot 项目搭建、并使用Logger日志记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zimiao552147572/article/details/89878541

搭建tomcat中运行的java项目、并使用Logger日志记录

模板项目下载链接:https://pan.baidu.com/s/1E7P7agwkyhx67q6joDGDWw 
提取码:35w2 

注意:

1.由于spring boot集成了tomcat,所以打包的时候不再使用war,而是使用jar
2.spring boot的启动类 需要 extends SpringBootServletInitializer,并且重写configure方法

pom.xml 

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>log4j-over-slf4j</artifactId>
					<groupId>org.slf4j</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j</artifactId>
			<version>1.3.8.RELEASE</version>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!--排除默认的logback日志,使用log4j -->
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
		</dependency>
		<!-- 项目部署打成jar包 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.2.2</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.2.2</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- 如果部署用到外部tomcat 需要排除内部tomcat 这个注释就打开 -->
		<!-- 
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		 -->
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<!-- spring boot的启动类:class ApilogApplication extends SpringBootServletInitializer 该类的全限定类名  -->
					<mainClass>com.xx.ApilogApplication</mainClass>
				</configuration>
			</plugin>
		</plugins>
	</build>

 

项目名\src\main\resources 目录下的配置文件

log4j.properties

log4j.rootCategory=INFO, stdout,common,common-error

# 标准控制台日志输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] [%-5p] [%c] [%t] [%l] - %m%n

# 所有日志文件
#window 日志文件路径
#LOG_BASE=D:/logs/
#linux 日志文件路径
LOG_BASE=/home/gzp/springbootlogs
log4j.appender.common=org.apache.log4j.DailyRollingFileAppender
log4j.appender.common.encoding=UTF-8
log4j.appender.common.file=${LOG_BASE}/loginfo.log
log4j.appender.common.layout=org.apache.log4j.PatternLayout
log4j.appender.common.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] [%-5p] [%c] [%t] [%l] - %m%n

# 错误日志
#log4j.logger.common-error=error,common-error
log4j.appender.common-error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.common-error.encoding=UTF-8
log4j.appender.common-error.file=${LOG_BASE}/error.log
log4j.appender.common-error.threshold=ERROR
log4j.appender.common-error.layout=org.apache.log4j.PatternLayout
log4j.appender.common-error.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] [%-5p] [%c] [%t] [%l] - %m%n

# 接口报文日志文件:json串或xml报文
log4j.logger.packet=info,packet
log4j.appender.packet=org.apache.log4j.DailyRollingFileAppender
log4j.appender.packet.encoding=UTF-8
log4j.appender.packet.file=${LOG_BASE}/api.log
log4j.appender.packet.layout=org.apache.log4j.PatternLayout
log4j.appender.packet.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] [%-5p] [%c] [%t] [%l] - %m%n

# debug log for ibatis3
log4j.logger.java.sql.Connection=INFO,stdout
log4j.logger.java.sql.Statement=INFO,stdout
log4j.logger.java.sql.PreparedStatement=INFO,stdout
log4j.logger.java.sql.ResultSet=INFO,stdout

log4j.logger.jdbc.sqlonly=INFO
log4j.logger.jdbc.sqltiming=INFO,stdout
log4j.logger.jdbc.audit=INFO
log4j.logger.jdbc.resultset=INFO
log4j.logger.jdbc.connection=INFO

application.properties

#服务器的端口的配置
server.port=8080
#应用的名称(spring cloud里面会用到,暂时不用理会)
spring.profiles.active=dev
#用户配置开发(dev),测试(test),生产(prod)的配置文件,避免频繁改动
spring.application.name=项目名/应用名

 

application-dev.properties

#服务器的端口的配置
server.port: 8019
server.tomcat.uri-encoding=UTF-8
#应用的名称
  spring:
    application:
        name: 项目名/应用名
#用户配置开发(dev),测试(test),生产(prod)的配置文件,避免频繁改动
    profiles:
        active: dev
#1.2spring
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

application-prd.properties

#服务器的端口的配置
server.port: 8018
server.tomcat.uri-encoding=UTF-8
#应用的名称
  spring:
    application:
        name:  项目名/应用名
#用户配置开发(dev),测试(test),生产(prod)的配置文件,避免频繁改动
    profiles:
        active: prd

#1.2spring
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true

日志记录的工具类之一:LogManager

Logger logger = LogManager.getLogger(xx.class);
logger.error(e.getMessage());
logger.info(e.getMessage());

日志记录的工具类之二:class LogHelper

package com.xx.xx.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

import org.apache.log4j.Logger;

/***************************************************************************
 * log4j日志记录帮助类 
 ***************************************************************************/
public class LogHelper {
	public final static int MAX_WORD=5000;
	public static boolean DEBUG = false;
 
	
	/***********************************************************************
	 * 取得log4j日志记录对象common,此对象将log运行日志保存到common.log
	 * @return
	 * 2018年5月9日
	 ***********************************************************************/ 
	public static Logger commonLogger() {
		return Logger.getLogger("common");
	}
	
	
	/***********************************************************************
	 * 取得log4j日志记录对象commonErrorLogger,此对象将log错误日志保存到common-error.log
	 * @return
	 * 2018年5月9日
	 ***********************************************************************/ 
	public static Logger commonErrorLogger() {
		return Logger.getLogger("common-error");
	}
	
	
	/**********************************************************************
	 *  取得log4j日志记录对象packetLogger,此对象将log错误日志保存到packet-info.log
	 * @return
	 * 2018年5月9日
	 **********************************************************************/ 
	public static Logger packetLogger() {
		return Logger.getLogger("packet");
	}
	
	/**
	 * common Info 记录日志
	 * @param infoMsg
	 */
	public static void commoninfo(String infoMsg){
		commonLogger().info(infoMsg);
	}
	
	/**
	 * common Debug 记录日志
	 * @param debugMsg
	 */
	public static void commondebug(String debugMsg){
		commonLogger().debug(debugMsg);
	}
	
	/**
	 * common Warn记录日志
	 * @param debugMsg
	 */
	public static void commonwarn(String warnMsg){
		commonLogger().warn(warnMsg);
	}
	
	/**
	 * common Error 记录日志
	 * @param errorMsg
	 */
	public static void commonerror(String errorMsg, Throwable e){
		commonErrorLogger().error(errorMsg + ": " + getExceptionInfo(e));
	}
	
	/**
	 * common Error 记录日志
	 * @param errorMsg
	 */
	public static void commonerror(String errorMsg, String error){
		commonErrorLogger().error(errorMsg + ": " + error);
	}
	
	/**
	 * packet Info 记录日志
	 * @param errorMsg
	 */
	public static void packetinfo(String msg){
		packetLogger().info(msg);
	}
	/**
	   * common Error 记录单个日志
	   * @param errorMsg
	   */
	  public static void commonerror(String errorMsg){
	    commonErrorLogger().error(errorMsg);
	  }
	/** 
	* 将异常信息中内容转换为字符串形式返回 
	* @param e 异常对象
	* @return String    返回类型 
	* @throws 
	*/ 
	public static String getExceptionInfo(Throwable e) {
		String s = null;
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw, true);
		e.printStackTrace(pw);
		pw.flush();
		sw.flush();
		s = sw.toString();
		// 控制最大字符
		if (s.length()>MAX_WORD) {
			s = s.substring(0, MAX_WORD);
		}
		if (null != sw) {
			try {
				sw.close();
				sw = null; 
			} catch (IOException e2) {}
			  finally {
				sw = null;
			}
		}
		if (null != pw) {
			pw.close();
			pw = null;
		}
		return s;
	}
}

项目的启动类class ApilogApplication extends SpringBootServletInitializer

package com.xx.xx;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
@ServletComponentScan("com.bigdata.apilog.file")
public class ApilogApplication extends SpringBootServletInitializer{

	public static void main(String[] args) {
		SpringApplication.run(ApilogApplication.class, args);
	}
	 protected SpringApplicationBuilder configure(
	            SpringApplicationBuilder builder) {
	        return builder.sources(this.getClass());
	 }
}

项目的主运行类

           @WebListener

           class xx implements ServletContextListener

spring boot 项目运行命令

前台运行
	java -jar xx.jar

后台运行
	nohup java -jar xx.jar >/dev/null 2>&1 &			标准输出和标准错误都重定向到了/dev/null	 
	nohup java -jar xx.jar >/dev/null 2>/dev/null & 	标准输出和标准错误都重定向到了/dev/null	 
	nohup java -jar xx.jar >log.out & 	 	 产生的日志文件log.out 在jar包的同一目录下
 
jobs 命令可查看后台运行的程序
    (注意:只有在启动后台程序的窗口中执行jobs命令才能打印出信息,在新开的别的窗口中是无法查看到信息的,或者可以使用ps aux|grep xx.jar 来解决)
	显示 [编号]+  运行状态		启动项目的执行命令
	显示 [1]+  		Exit 1		nohup java -jar xxx.jar > /dev/null 2> /dev/null	其中Exit表示后台程序已经退出运行
	显示 [2]+  		Running		nohup java -jar xxx.jar > log.out  					其中Running表示后台程序正在运行

fg 编号
	该命令可把后台程序调到前台运行来,即变为前台程序,此时可继续通过 Ctrl+C 直接停止该程序的运行
	编号指的是jobs中显示后台程序所对应的编号 

猜你喜欢

转载自blog.csdn.net/zimiao552147572/article/details/89878541
今日推荐