版权声明:本文为博主原创文章,未经博主允许不得转载。 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中显示后台程序所对应的编号