一.新建maven的java工程

1.eclipse里file-new-other,选择maven Project

2.选中 Use default Workspace location,然后 next

3.选择maven-archetype-quitstart,然后next

4.填入工程信息,然后finish

6.新建好的工程结构如图

7.将test下和java下自动生成的java类删除,右键build-path选择好jdk版本,整个工程就建好了。

二.配置log4j

1.将工程目录调整成下图(这步其实是为下面maven打包做准备)

2.通过maven导入log4j,jar

在pom.xml的<dependencies>里加入以下语句

    <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.0</version>
</dependency>

3.在src/conf下面新建文件log4j.properties,内容如下:

 ### 设置###
log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制台###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 输出debug级别以上的日志到E://logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 输出error级别以上的日志到E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

4.新建日志测试类,内容如下:

package com.zhuzhixi.zhuzhixiDataMaker.Test;

import org.apache.log4j.Logger;

public class LogTest {

	private static Logger logger = Logger.getLogger(LogTest.class);  

	public static void main(String[] args) {
// TODO Auto-generated method stub // 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
} }

5.结果如下:

5.1在控制台打出如下信息

5.2在e盘的logs文件夹下出现两个文件

内容分别如下:

三.配置maven-assembly-plugin并打包

1.在pon.xml里面更改为下面的内容(工程项目的文件结构在上面)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>com.zhuzhixi</groupId>
<artifactId>zhuzhixiDataMaker</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<description></description> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<!-- log4j日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies> <build>
<resources>
<resource>
<directory>src/main/conf</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<encoding>UTF-8</encoding>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/main/assemble/package.xml</descriptor>
</descriptors>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<verbose>true</verbose>
</configuration>
</plugin>
</plugins>
</build> </project>

2.src/main/assemble目录下的package.xml内容为:

<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd">
<id>package</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>src/main/bin</directory>
<outputDirectory>bin</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/conf</directory>
<outputDirectory>conf</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/logs</directory>
<outputDirectory>logs</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/work</directory>
<outputDirectory>work</outputDirectory>
</fileSet>
</fileSets>
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
</assembly>

3.在src/main/bin下面新建文件start.bat和start.sh两个文件,用于windows和linux里启动java程序

start.bat的内容如下:

@echo off

SET base=%~dp0
SET main_class="com.zhuzhixi.zhuzhixiDataMaker.Test.LogTest" SET conf=%base%..\conf
SET libs=%base%..\lib
SET class_path=%conf%;%libs%\*;
java -classpath %class_path% %main_class%
@pause

  

start.sh的内容如下:

#!/bin/bash

script_path=$(cd "$(dirname "$0")"; pwd)
lib_path=${script_path}/../lib
main_class="com.zhuzhixi.zhuzhixiDataMaker.Test.LogTest"
conf_path=${script_path}/../etc/conf CLASSPATH="${conf_path}"
for jar in $lib_path/*.jar
do
if [ "$CLASSPATH" = "" ] ; then
CLASSPATH=$jar
else
CLASSPATH=$CLASSPATH:$jar
fi
done export CLASSPATH=$CLASSPATH
echo "java ${main_class} \"$@\""

4.右键工程-Debug As-maven assembly:assembly

输出日志如下图则打包成功。

四.测试

1.解压zip文件,文件夹结构如下,所有文件均存在:

2.进入bin,运行start.bat(运行环境需要安装jre环境)

3.结果如下:

在e盘的logs文件夹下

log.log内容如下:

error.log内容如下

因此,conf的log4j.properties正确被读取了。

五.将log4j的日志位置设为动态,即打包后的文件夹里的logs文件夹

1.将log4j.properties改为一下内容,(将日志位置用${log4j.home}代替)

 ### \u8BBE\u7F6E###
log4j.rootLogger = debug,stdout,D,E ### 设置 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 设置debug级别以上的日志到logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${log4j.home}/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 设置error级别以上的日志到logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =${log4j.home}/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

2.主类不再是LogTest.java ,新建一个类LogTestMain.java,内容如下:

package com.zhuzhixi.zhuzhixiDataMaker.Test;

import org.apache.log4j.Logger;

public class LogTestMain {

	public static void main(String[] args) {
// TODO Auto-generated method stub String binPath=System.getProperty("user.dir") ;
System.out.println(binPath+"\\..\\logs");
System.setProperty("log4j.home", binPath+"\\..\\logs");
String log4jHome=System.getProperty("log4j.home");
System.out.println(log4jHome); new LogTest().testLog();
} }

 2.将LogTest.java的内容改成下面:

package com.zhuzhixi.zhuzhixiDataMaker.Test;

import org.apache.log4j.Logger;

public class LogTest {
private static Logger logger = Logger.getLogger(LogTest.class); public void testLog(){
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}

 3.然后更改start.bat的main_class为com.zhuzhixi.zhuzhixiDataMaker.Test.LogTestMain

@echo off

SET base=%~dp0
SET main_class="com.zhuzhixi.zhuzhixiDataMaker.Test.LogTestMain"
SET conf=%base%..\conf
SET libs=%base%..\lib
SET class_path=%conf%;%libs%\*;
java -classpath %class_path% %main_class%
@pause

 4.此时再打包后运行start.bat,日志文件就会在打包后的logs文件夹里了。

注意:一定要在执行Logger.getLogger(LogTestMain.class);之前执行System.getProperty("log4j.home");,所以主类不能使用log打印日志

eclipse通过maven建立java se工程配置log4j,打包成zip,将jar包和配置文件分开,并以bat和sh文件启动java程序的更多相关文章

  1. maven工程打包成runnable的jar包,拷贝资源和依赖jar包

    eclipse下新建maven工程,生成runnable的jar包.之前一直是手动拷贝依赖的jar包和资源文件,烦得要死.上网可劲查了一下.解决方案如下. 在pom的配置文件中做如下配置: <b ...

  2. Eclipse创建java web工程配置Tomacat和JDK 【转】

    在学习AJAX过程中,还用Intellij就有点老旧了,这是后装个Eclipse时,发现这个配置也很头疼,现在就叫你如何创建一个web工程,同时叫你配置Eclipse. 一.创建一个web工程 1.打 ...

  3. eclipse 创建maven 项目 动态web工程完整示例

    需求表均同springmvc案例 此处只是使用maven 注意,以下所有需要建立在你的eclipse等已经集成配置好了maven了,说白了就是新建项目的时候已经可以找到maven了 没有的话需要安装m ...

  4. eclipse 创建maven 项目 动态web工程报错

    Eclipse 创建maven 项目 动态web工程 注:Eclipse版本为(Version: Mars.1 Release (4.5.1))maven版本为(apache-maven-3.3.9) ...

  5. eclipse 创建maven 项目 动态web工程完整示例 maven 整合springmvc整合mybatis

    接上一篇: eclipse 创建maven 项目 动态web工程完整示例 eclipse maven工程自动添加依赖设置 maven工程可以在线搜索依赖的jar包,还是非常方便的 但是有的时候可能还需 ...

  6. (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法

    转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...

  7. java工程中不能存在多个数据库连接jar包

    java工程中不能存在多个数据库连接jar包 比如存在mysql-java-connector.jar的,放入mssqlserver.jar就会产生冲突.只能存在一个类型的jar包.

  8. springmvc 项目完整示例07 设置配置整合springmvc springmvc所需jar包springmvc web.xml文件配置

    前面主要是后台代码,spring以及mybatis的整合 下面主要是springmvc用来处理请求转发,展现层的处理 之前所有做到的,完成了后台,业务层和持久层的开发完成了 接下来就是展现层了 有很多 ...

  9. Maven项目打包成可执行Jar文件

    在使用Maven完成项目以后,如果需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁 ...

随机推荐

  1. 菜鸡的2017CPPC网络赛

    Friend-Graph Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  2. hdu 1527 威佐夫博弈

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  3. EasyUI 获取行ID,符合条件的添加样式

    function GetTableTrID() { var p = $('#PreFixgrid').prev().find('div table:eq(1)'); var ID = $(p).fin ...

  4. 有关php启动时候报错信息

    1 : An another FPM instance seems to already listen on /tmp/php-cgi.sock有关/tem/php-cgi.sock问题查看进程可以或 ...

  5. BZOJ-1507 文本编辑器(Editor)

    一道极其相似的题...http://hi.baidu.com/8361101/item/5b149103cbf4007cbee97e5f 就多了个区间查找,少了个翻转... 少了翻转的话貌似可以不用S ...

  6. BZOJ 4128 Matrix ——BSGS

    矩阵的BSGS. 只需要哈希一下存起来就可以了. 也并不需要求逆. #include <map> #include <cmath> #include <cstdio> ...

  7. Codeforces 333E Summer Earnings ——Bitset

    [题目分析] 找一个边长最大的三元环. 把边排序,然后依次加入.加入(i,j)时,把i和j取一个交集,看看是否存在,存在就找到了最大的三元环. 输出即可,n^3/64水过. [代码] #include ...

  8. BZOJ 1026: [SCOI2009]windy数 【数位dp】

    Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...

  9. 刷题总结——小凸玩矩阵(scoi)

    题目: 题目背景 SCOI2015 DAY1 T1 题目描述 小凸和小方是好朋友,小方给了小凸一个 n×m(n≤m)的矩阵 A,并且要求小凸从矩阵中选出 n 个数,其中任意两个数都不能在同一行或者同一 ...

  10. 标准C程序设计七---26

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...