由于我们系统采用maven管理,使用syslog4j时,maven在线仓库里只有syslog4j0.9.30版本的jar包,所以就只用了 syslog4j.0.9.30.jar
实际测试发现,当消息内容含有中文时,消息就会发送截断,变得不完整,即使消息内容进行了utf-8编码依然存在同样这个问题
替换成最新的syslog4j0.9.46 就不会发生这个现象。
这里就需要手动引入第三方jar包,到maven中。
- <dependency>
- <groupId>org.syslog4j</groupId>
- <artifactId>syslog4j</artifactId>
- <version>0.9.46</version>
- <scope>system</scope>
- <systemPath>${project.basedir}/webapp/WEB-INF/lib/syslog4j-0.9.46.jar</systemPath>
- </dependency>
其中 涉及到了maven的内置属性。
内置属性(Maven预定义,用户可以直接使用)
${basedir}表示项目根目录,即包含pom.xml文件的目录;
${version}表示项目版本;
${project.basedir}同${basedir};
${project.baseUri}表示项目文件地址;
${maven.build.timestamp}表示项目构件开始时间;
${maven.build.timestamp.format}表示属性${maven.build.timestamp}的展示格式,默认值为yyyyMMdd-HHmm,可自定义其格式,其类型可参考java.text.SimpleDateFormat。
Maven的<dependency>中还引入了<scope>,它主要管理依赖的部署。目前<scope>可以使用5个值:
* compile,缺省值,适用于所有阶段,会随着项目一起发布。
* provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
* runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
* test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
当配置了<scope>为system后,需要对systemPath进行配置,直接指定到jar包存放位置即可。
ps:对于syslog 消息头中主机名的设置,syslog4j.0.9.46可以通过
SyslogIF syslog = Syslog.getInstance("udp");
syslog.getConfig().setLocalName("XXXX");
直接进行设置