syslog4j消息内遇中文,消息内容不完整解决办法

由于我们系统采用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");

直接进行设置

猜你喜欢

转载自zhuzhumao.iteye.com/blog/2298684