1、项目目录结构图,lib包引入了一些关于common logging+log4j2相关的jar。

2、编写相关的build.xml

<?xml version="1.0" encoding="utf-8"?>
<!--定义生成文件的project根元素,默认的target为空-->
<project name="log4j2Test" basedir="." default="all">
<target name="all" depends="help,init,compile,build,run,clean">
<echo>Finish!</echo>
</target> <!--定义4个简单属性-->
<property name="src" value="src"/>
<property name="classes" value="classes"/>
<property name="lib" value="lib"/>
<property name="dest" value="dest"/>
<property name="log" value="log"/> <!--定义help target,用于输出该生成文件的帮助信息-->
<target name="help" description="打印帮助信息">
<echo>help - 打印帮助信息</echo>
<echo>complie - 编译Java源文件</echo>
<echo>run - 运行程序</echo>
<echo>build - 打包Jar包</echo>
<echo>clean - 清除所有编译生成的文件</echo>
</target> <!--init target,初始化-->
<target name="init">
<delete dir="${classes}"/>
<mkdir dir="${classes}"/>
<delete dir="${dest}"/>
<mkdir dir="${dest}"/>
<delete dir="${log}"/>
<mkdir dir="${log}"/>
</target> <!--定义一组文件路径集-->
<path id="classpath">
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
<pathelement path="${classes}"/>
</path> <!--定义complie target,用于编译Java源文件-->
<target name="compile" description="编译java源文件">
<!--编译java文件,编译后的class文件放到classes属性所代表的文件夹内-->
<javac destdir="${classes}" includeantruntime="yes" encoding="utf-8">
<!--指定需要编译的Java文件所在的位置-->
<src path="${src}"/>
<!--指定编译Java文件所需要的第三方类库所在的位置-->
<classpath refid="classpath"/>
</javac>
</target> <!--定义build target,用于打包jar文件,运行该target之前会先运行compile target-->
<target name="build" description="打包jar文件" depends="compile">
<!--将项目中除编译生成class文件的java文件之外的其他类型文件拷贝到对应的文件夹-->
<copy todir="${classes}">
<fileset dir=".">
<include name="log4j2.xml"/>
<include name="说明.txt"/>
</fileset>
</copy>
<!--指定将classes属性所代表的文件夹下的所有*.class文件都打包到app.jar文件中-->
<jar destfile="${dest}/app-1.0.2.jar" basedir="${classes}" includes="**/*.class **/*.xml **/*.txt">
<!--为jar包的清单文件添加属性-->
<manifest>
<attribute name="Main-Class" value="src.com.lfy.Student"/>
</manifest>
<!--将相关被引用的包以解压后的方式打包进jar包中-->
<zipfileset src="${lib}/commons-logging-1.2.jar"></zipfileset>
<zipfileset src="${lib}/log4j-jcl-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-core-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-api-2.12.0.jar"></zipfileset>
</jar>
<!--打包第3方jar通过引用的方式运行的可执行jar-->
<jar destfile="${dest}/app-1.0.3.jar" basedir="${classes}" includes="**/*.class **/*.xml **/*.txt">
<!--为jar包的清单文件添加属性-->
<manifest>
<attribute name="Main-Class" value="src.com.lfy.Student"/>
</manifest>
<!--将相关被引用的包以解压后的方式打包进jar包中-->
<zipfileset src="${lib}/commons-logging-1.2.jar"></zipfileset>
<zipfileset src="${lib}/log4j-jcl-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-core-2.12.0.jar"></zipfileset>
<zipfileset src="${lib}/log4j-api-2.12.0.jar"></zipfileset>
</jar>
</target> <!--定义run target,用于运行Java源文件,运行该target之前会先运行compile target-->
<target name="run" description="运行程序" depends="compile">
<!--运行lfy.HelloWorld类,其中fork指定启动另一个JVM来执行Java命令-->
<java classname="src.com.lfy.Student" fork="yes" failonerror="true">
<classpath refid="classpath"/>
<!--运行Java程序时传入2个参数-->
<arg line="测试参数1 测试参数2"/>
</java>
<!--运行可执行jar文件-->
<java jar="${dest}/app-1.0.2.jar" fork="yes" failonerror="true">
<!--运行Java程序时传入2个参数-->
<arg line="p1 p2"/>
</java>
<java jar="${dest}/app-1.0.3.jar" fork="yes" failonerror="true">
<!--运行Java程序时传入2个参数-->
<arg line="p1 p2"/>
</java>
</target> <!--定义clean target,用于删除所有编译生成的文件-->
<target name="clean" description="清除所有编译生成的文件">
<delete dir="${classes}"/>
<delete dir="${dest}"/>
<delete dir="${log}"/>
</target> </project>

3、编写log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<!-- 定义日志格式 -->
<Property name="log.pattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n</Property>
<!-- 定义文件名变量 -->
<Property name="file.all.filename">log/all.log</Property>
<Property name="file.all.pattern">log/all.%i.log.gz</Property>
<Property name="file.err.filename">log/err.log</Property>
<Property name="file.err.pattern">log/err.%i.log.gz</Property>
</Properties>
<!-- 定义Appender,即目的地 -->
<Appenders>
<!-- 定义输出到控制台 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 日志格式引用上面定义的log.pattern -->
<PatternLayout pattern="${log.pattern}"/>
</Console>
<!-- 定义输出到文件,文件名引用上面定义的file.all.file.filename -->
<RollingFile name="all" bufferedIO="true" fileName="${file.all.filename}" filePattern="${file.all.pattern}">
<PatternLayout pattern="${log.pattern}"/>
<Policies>
<!-- 根据文件大小自动切割日志 -->
<SizeBasedTriggeringPolicy size="10 KB" />
</Policies>
<!-- 保留最近5份 -->
<DefaultRolloverStrategy max="5" />
</RollingFile>
<!-- 定义输出到文件,文件名引用上面定义的file.err.file.filename -->
<RollingFile name="err" bufferedIO="true" fileName="${file.err.filename}" filePattern="${file.err.pattern}">
<PatternLayout pattern="${log.pattern}"/>
<Policies>
<!-- 根据文件大小自动切割日志 -->
<SizeBasedTriggeringPolicy size="2 KB" />
</Policies>
<!-- 保留最近5份 -->
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<!-- 对info级别的日志,输出到console -->
<AppenderRef ref="console" level="info"/>
<!-- 对info级别的日志,输出到all,即上面定义的RollingFile -->
<AppenderRef ref="all" level="info"/>
<!-- 对error级别的日志,输出到err,即上面定义的RollingFile -->
<AppenderRef ref="err" level="error"/>
</Root>
</Loggers>
</Configuration>

4、编写Person.java、Student.java

Person.java

package src.com.lfy;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class Person{
/**
* 使用LogFactory.getLog(getClass()),也可以使用LogFactory.getLog(Person.class)
* 前者可以使子类的实例直接使用log,看Student.java中的代码
*/
protected final Log log=LogFactory.getLog(getClass());
void foo(){
log.info("Person.foo()");
}
}

Student.java

package src.com.lfy;

public class Student extends Person{
void bar(){
log.info("Student.bar()");
try{
int a=5,b=1;
b=a/0;
}catch(Exception e){
//捕获异常非常简单
log.error("got exception",e);
}
}
public static void main(String[] agrs){
Student stu=new Student();
stu.bar();
}
}

5、运行结果

6、总结:实现了简单的log4j应用。

Ant-编译构建(2)-第3方jar包引入、log4j2的更多相关文章

  1. 如何利用maven将本地jar包引入到工程之中

    1.在个人开发模式下,可以将jar包放入项目的lib目录中,在pom.xml中做如下配置: <dependencies> <dependency> <groupId> ...

  2. [Android]proguard重新编译和如何不混淆第三方jar包

    转载自:http://glblong.blog.51cto.com/3058613/1536516 一.ant安装.环境变量配置及验证 (一)安装ant 到官方主页http://ant.apache. ...

  3. 构建Maven项目自动下载jar包

    使用Maven 自动下载jar包 右键单击项目,将项目 转换成Maven 项目 然后进去Maven官网 http://mvnrepository.com/ 这里有大量的jar包供我们使用,比如我现在要 ...

  4. 【转】构建Maven项目自动下载jar包

    原文地址:https://blog.csdn.net/gfd54gd5f46/article/details/54973954 使用Maven 自动下载jar包 右键单击项目,将项目 转换成Maven ...

  5. eclipse把jar包引入项目的两种方法

    方法一: build path引入jar包 方法二: 把jar包放入lib文件夹 区别: 把jar包放入lib文件夹,以后把程序发给别人,别人可以直接运行而无需再自己添加jar包 总结: 1.有时即使 ...

  6. jjava:将jar包引入环境变量的一个骚操作以及因此搞出来的扑街问题

    现在我有一个java文件,我只想javac启动,但是这货import了一堆jar里面的东西. 于是我下回了所有的jar包,将这些jar包丢到jdk1.8.0_162\jre\lib\ext里面就ok了 ...

  7. 04-SSH综合案例:环境搭建之jar包引入

    刚才已经把表关系的分析已经分析完了,现在呢就先不去创建这个表,写到哪儿的时候再去创建这个表. 1.4 SSH环境搭建: 1.4.1 第一步:创建一个web项目. 1.4.2 第二步:导入相应jar包. ...

  8. 怎样把本地的jar包引入到maven工程里面

    有些jar包在maven库里面查找不到,但是maven项目又有用到,此时最简单的方法就是把该jar包放到工程底下某个目录,然后在pom.xml里面配置dependency引入它. 具体如何操作呢? 假 ...

  9. jenkins#构建并部署springboot的jar包

    0. 前提是有一个可以用的没有问题的Jenkins环境,这是基础 1. 安装publish over ssh 插件,(如果网速太慢,请去github 克隆代码,然后自己构建,然后上传安装此插件) 2. ...

随机推荐

  1. Python 面向对象编程之进阶使用

    我们在https://www.cnblogs.com/yinsedeyinse/p/9976280.html中学习了面向对象的编程方法.现在学习他的进阶用法. 1. 静态方法 2. 类方法 3. 属性 ...

  2. 正确理解MySQL中的where和having的区别

    原文:https://blog.csdn.net/yexudengzhidao/article/details/54924471 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以 ...

  3. linux运维、架构之路-Kubernetes集群部署TLS双向认证

    一.kubernetes的认证授权       Kubernetes集群的所有操作基本上都是通过kube-apiserver这个组件进行的,它提供HTTP RESTful形式的API供集群内外客户端调 ...

  4. linux运维、架构之路-python2.6升级3.6

    一.环境 1.系统 [root@m01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 ~]# uname -r -. ...

  5. linux运维、架构之路-cobbler无人值守

    一.cobbler介绍 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等 1.主要功能:①Cobbl ...

  6. mysql CREATE DATABASE语句 语法

    mysql CREATE DATABASE语句 语法 作用:创建数据库. 大理石构件 语法:CREATE DATABASE database_name mysql CREATE DATABASE语句 ...

  7. 【HDOJ6731】Angle Beats(极角排序)

    题意:二维平面上给定n个整点,q个询问 每个询问给定另外的一个整点,问其能与n个整点中任意取2个组成的直角三角形的个数 保证所有点位置不同 n<=2e3,q<=2e3,abs(x[i],y ...

  8. [CSP-S模拟测试]:chess(数学)

    题目描述 $dirty$在一个棋盘上放起了棋子. 棋盘规格为$n\times m$,他希望任意一个$n\times n$的区域内都有$C$个棋子.$dirty$很快就放置好了一个满足条件的棋盘方案,但 ...

  9. 大数据笔记(九)——Mapreduce的高级特性(B)

    二.排序 对象排序 员工数据 Employee.java  ----> 作为key2输出 需求:按照部门和薪水升序排列 Employee.java package mr.object; impo ...

  10. jvm监测

    jvm调优,首先,你得会jvm性能检测.开方得先诊断啊.