Java小工具-Liunx监控TCP某个端口连接数变化并记录log日志

1:导包

需要导入log4j2的2个依赖

2:log4j2.xml配置文件

命令:log4j2.xml 放置在./log4j2路径下 并且要将log4j2文件夹添加到esclipse Source目录下

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<!-- 日志输出的位置 -->
	<Properties>
		<!-- 保存在当前路径的logs文件夹下 -->
		<Property name="basePath">./logs</Property>
	</Properties>
	<!-- 日志输出的位置 -->
	<Appenders>
		<!-- filePattern表示滚动一天记录日志命名 -->
		<RollingFile name="file" fileName="${basePath}/outInfo.log"
			filePattern="${basePath}/test-%d{yyyy-MM-dd}.log">
			<PatternLayout charset="UTF-8" pattern="%d{YYY-MM-dd-HH:mm:ss} %-5level %c{1} -%msg%n" />
			<Policies>
				<!-- interval="1"基于时间触发RollingFile 表示滚动一天记录日志 -->
				<TimeBasedTriggeringPolicy interval="1"
					modulate="true" />
				<SizeBasedTriggeringPolicy size="10 MB" />
			</Policies>
		</RollingFile>
		<!-- 日志在控制台输出用 Console -->
		<Console name="ConsoleOut">
			<!-- 日志显示的风格 -->
			<PatternLayout pattern="%d{YYY-MM-dd-HH:mm:ss} %-5level %c{1} -%msg%n" />
		</Console>
	</Appenders>
	<Loggers>
		<!-- 日志输出级别为info -->
		<Root level="info">
			<!-- 前面有定义RollingFile的名称为file -->
			<AppenderRef ref="file" />
		</Root>
	</Loggers>
</Configuration>

3:Java代码实现

package cn.RunLinuxCommond.Runner;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * 
 *
 */
public class RunCommond {

	private static final Logger log = LogManager.getLogger(RunCommond.class.getName());

	public static void main(String[] args) {

		String cmd = "netstat -apn|grep " + args[0] + "|grep 'ESTABLISHED'|wc -l";//监控TCP连接数的Liunx命令
		
		//循环运行 实现实时刷新监控
		while (true) {

			List<String> runners = Runners(cmd);

			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

			int tcps = Integer.parseInt(runners.get(0));

			if (tcps < Integer.parseInt(args[1])) {

				System.err.println("[" + df.format(new Date()) + "]" + "Error.....  目前连接Port:" + args[0] + "预期数量是:"+args[1]+"--实际连接数为:"+ runners.get(0));

				log.error("....目前连接Port:" + args[0] + "预期数量是:"+args[1]+"--实际连接数为:--"+ runners.get(0));

			} else {

				System.out.println("[" + df.format(new Date()) + "]" + "Running.....  目前连接Port:" + args[0] + "的数量是:"
						+ runners.get(0));

				log.info("....目前连接Port:" + args[0] + "的数量是:" + runners.get(0));

			}
			
			try {
				Thread.sleep(5000);
				
			} catch (InterruptedException e) {

				e.printStackTrace();
			}

		}

	}

	public static List<String> Runners(String commonds) {

		InputStreamReader isr =null;
		BufferedReader br = null;

		List<String> list = new ArrayList<>();

		Runtime runtime = Runtime.getRuntime();

		try {

			String[] cmd = new String[] { "/bin/sh", "-c", commonds };

			Process proc = runtime.exec(cmd);

			InputStream stderr = proc.getInputStream();

			isr = new InputStreamReader(stderr, "GBK");

			br = new BufferedReader(isr);

			String line = "";
			while ((line = br.readLine()) != null) {

				list.add(line);
			}

		} catch (IOException e) {

			e.printStackTrace();
		}finally{
			
			try {
				br.close();
				isr.close();
				
			} catch (IOException e) {
				
				e.printStackTrace();
			}		
		}

		return list;
	}

}

4:打包export成可执行的jar包

4.1:右击项目-->export

4.2:选择 Runnable JAR file --->Next

4.3:命名导出jar包

猜你喜欢

转载自blog.csdn.net/hujyhfwfh2/article/details/86612724