本类的功能:
1.每天凌晨1点自动上传昨天的一天的日志信息。
2.上传当天的日志信息。
注意点:
1.日志信息为存储于数据库中的json字符串。
2.生产的文件为xml格式,生成文件存储路径:工程名\WEB-INF\classes\4ALog
3.每个日志不超过1M
LogTask.java
package org.jasig.cas.a4.tools; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.TimerTask; import org.apache.log4j.Logger; import org.json.JSONObject; import sun.net.TelnetOutputStream; import sun.net.ftp.FtpClient; /** * Title : AuditLog4AService * <p/> * Description : 4A审计日志非实时接口 * <p/> * CopyRight : CopyRight (c) 2011 * <p/> * Company : 亚信联创科技(中国)有限公司 */ public class LogTask extends TimerTask { private static String propertieName = "4ALog.properties"; private static String charset = "UTF-8"; public static A4LogDao a4LogDao; private static final int size = 1 * 1024 * 1024; //测试 // private static final int size = 2 * 1024; //* 1024; private Logger log = Logger.getLogger(LogTask.class); private boolean upLoadTodayLog = false; /** * {@inheritDoc} * * @see java.util.TimerTask#run() */ @Override public void run() { // 获取4A审计日志调度开关 try { String A4_switch = UtilProperties.getProperty(propertieName, "A4_switch","0"); if ("0".equals(A4_switch))return; } catch (Exception ex) { throw new RuntimeException("Error reading 4ALog.properties file. " + ex.getMessage(), ex); } Date startDate = null; List<String> list = null; try { if(this.upLoadTodayLog==true){ //上传当天的日记 startDate = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday()); list = a4LogDao.query(startDate,DateUtil.nextDate(startDate, 1)); }else{ Date endDate = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday()); // 凌晨1点开始上传昨天的日志 精确到天的时间 2013-10-22 startDate = DateUtil.nextDate(endDate, -1); list = a4LogDao.query(startDate, endDate); } } catch (ParseException e) { } if(list==null || list.size()==0)return; // 日志文件名定义 String realPath = this.getClass().getClassLoader().getResource( File.separator).getFile(); String filePath = realPath + File.separator + "4ALog"; File fileDir = new File(filePath); if (!fileDir.exists()) { fileDir.mkdirs(); } String fileDate = DateUtil.date2String(startDate, DateUtil.YYYYMMDD); int index = 1; File file = new File(filePath + File.separator + "4A." + fileDate + "_"+index + ".log"); FileOutputStream fos = null; try { // 写文件头 StringBuffer sb = new StringBuffer(); sb.append("<?xml version='1.0' encoding='UTF-8'?>\n"); sb.append("<ROOT>\n"); fos = new FileOutputStream(file); fos.write(sb.toString().getBytes(charset)); for (String jsonStr : list) { JSONObject jsonObj = new JSONObject(jsonStr); // 当写日志文件超过1M时,写文件尾,上传到FTP服务器,并新写入另一个日志文件,文件号自加1 if (file.length() >= size - 1000) { fos.write("</ROOT>".getBytes(charset)); fos.flush(); fos.close(); this.uploadFile(file); index = index + 1; file = new File(filePath + File.separator + "4A." + fileDate+ "_"+ index + ".log"); fos = new FileOutputStream(file); fos.write(sb.toString().getBytes(charset)); } String identity_name = "JTNGBAM"; String resource_code = "JTNGBAM"; String module_id = ""; String module_name = ""; // 写日志文件内容 StringBuffer log = new StringBuffer(); log.append("<LOG4A>\n "); log.append("<RESOURCE_KIND>").append("1").append("</RESOURCE_KIND>\n "); log.append("<IDR_CREATION_TIME>").append( DateUtil.date2String(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS)).append("</IDR_CREATION_TIME>\n "); log.append("<IDENTITY_NAME>").append(identity_name).append("</IDENTITY_NAME>\n "); log.append("<RESOURCE_CODE>").append(resource_code).append("</RESOURCE_CODE>\n "); log.append("<MAIN_ACCOUNT_NAME>").append(jsonObj.getString("main_account_name")).append("</MAIN_ACCOUNT_NAME>\n "); log.append("<SUB_ACCOUNT_NAME>").append(jsonObj.getString("sub_account_name")).append("</SUB_ACCOUNT_NAME>\n "); log.append("<OPERATE_TIME>").append(jsonObj.getString("operate_time")).append("</OPERATE_TIME>\n "); log.append("<OP_TYPE_NAME>").append(jsonObj.getString("op_type_name")).append("</OP_TYPE_NAME>\n "); log.append("<OP_TYPE_ID>").append(jsonObj.getString("op_type_id")).append("</OP_TYPE_ID>\n "); log.append("<OP_LEVEL_ID>").append(jsonObj.getString("op_level_id")).append("</OP_LEVEL_ID>\n "); log.append("<OPERATE_RESULT>").append(jsonObj.getString("operate_result")).append("</OPERATE_RESULT>\n "); log.append("<MODULE_ID>").append(module_id).append("</MODULE_ID>\n "); log.append("<MODULE_NAME>").append(module_name).append("</MODULE_NAME>\n "); log.append("<OPERATE_CONTENT>").append(jsonObj.getString("operate_content")).append("</OPERATE_CONTENT>\n "); log.append("<OBJECT_ID>").append("").append("</OBJECT_ID>\n "); log.append("<OBJECT_NAME>").append("").append("</OBJECT_NAME>\n "); log.append("<CLIENT_NETWORK_ADDRESS>").append(jsonObj.getString("client_address")).append("</CLIENT_NETWORK_ADDRESS>\n "); log.append("<CLIENT_ADDRESS>").append(jsonObj.getString("client_address")).append("</CLIENT_ADDRESS>\n "); log.append("<SERVER_ADDRESS>").append(jsonObj.getString("server_address")).append("</SERVER_ADDRESS>\n "); log.append("<CLIENT_CPU_SERIAL>").append("").append("</CLIENT_CPU_SERIAL>\n "); log.append("<CLIENT_PORT>").append("").append("</CLIENT_PORT>\n "); log.append("<CLIENT_MAC>").append("").append("</CLIENT_MAC>\n "); log.append("<SERVER_PORT>").append("").append("</SERVER_PORT>\n "); log.append("<SERVER_MAC>").append("").append("</SERVER_MAC>\n "); log.append("<SERVER_MAC>").append("").append("</SERVER_MAC>\n "); log.append("<BANKAPPROVE>").append("").append("</BANKAPPROVE>\n "); log.append("<BANKFLAG>").append("").append("</BANKFLAG>\n "); /* log.append("<DB_INFO_CODE>").append(db_info_code).append("</DB_INFO_CODE>\n "); log.append("<SQL_TABLES>").append(jsonObj.getString("sql_tables")).append("</SQL_TABLES>\n "); log.append("<SQL_WHERE_CONDITIONS>").append(jsonObj.getString("sql_where_conditions")).append("</SQL_WHERE_CONDITIONS>\n "); log.append("<TASK_CODE>").append("").append("</TASK_CODE>\n "); */ log.append("</LOG4A>\n"); fos.write(log.toString().getBytes(charset)); fos.flush(); } fos.write("</ROOT>".getBytes(charset)); fos.flush(); fos.close(); this.uploadFile(file); } catch (Exception e) { log.info("log:"+file.getPath()+" upload fail"); throw new RuntimeException("Connect to the database error. " + e.getMessage(), e); } } /** * Description: 上传文件到FTP服务器 * * @param file * 上传文件 */ private void uploadFile(File file) { log.info("start upload log:"+file.getPath()); String ftpServer = ""; String ftpUser = ""; String ftpPwd = ""; int ftpPort = 21; try { ftpServer = UtilProperties.getProperty(propertieName, "4a_ftp_server"); ftpUser = UtilProperties.getProperty(propertieName, "ftp_user"); ftpPwd = UtilProperties.getProperty(propertieName, "ftp_password"); ftpPort = Integer.parseInt( UtilProperties.getProperty(propertieName, "ftp_port")); } catch (Exception ex) { log.info("fail to read 4ALog.properties"); throw new RuntimeException("Error reading configuration file. "+ ex.getMessage(), ex); } // 连接FTP服务器 FtpClient ftpClient = new FtpClient(); try { ftpClient.openServer(ftpServer, ftpPort); ftpClient.login(ftpUser, ftpPwd); ftpClient.cd("/home/db2/gather_file/bam_remote/up"); // ftpClient.cd("/home/smc/tomcat6smc/logs"); log.info("上传ftp目录:\"" + ftpClient.pwd()); ftpClient.binary(); } catch (IOException e) { throw new RuntimeException("FTP server connection failed. "+ e.getMessage(), e); } // 上传文件 TelnetOutputStream tos = null; FileInputStream fis = null; try { fis = new FileInputStream(file); String fileName = file.getName(); tos = ftpClient.put(fileName); byte[] bytes = new byte[1024]; int c; while ((c = fis.read(bytes)) != -1) { tos.write(bytes, 0, c); } } catch (FileNotFoundException e) { throw new RuntimeException("File is not exist. " + e.getMessage(),e); } catch (IOException e) { throw new RuntimeException("Error uploading files. " + e.getMessage(), e); } finally { try { if (null != tos) tos.close(); if (null != fis) fis.close(); log.info("upload success file:"+file.getPath()); } catch (IOException ex) { throw new RuntimeException( "An error occurred while the stream is closed. " + ex.getMessage(), ex); } } } public void setUpLoadTodayLog(boolean upLoadTodayLog) { this.upLoadTodayLog = upLoadTodayLog; } }
A4LogDao .java
package org.jasig.cas.a4.tools; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.PreparedStatementSetter; import org.springframework.jdbc.core.support.JdbcDaoSupport; public class A4LogDao extends JdbcDaoSupport { private Logger log = LoggerFactory.getLogger(this.getClass()); /* * public static Map getMap() { HashMap<String, String> paraMap = new * HashMap<String, String>(); paraMap.put("main_account_name", * "test_wlt");// 主账号 paraMap.put("sub_account_name", "OPERATORID");// 从账号 * paraMap.put("op_type_id", "操作类型编码");// 操作类型编码 paraMap.put("op_type_name", * "op_type_name");// 操作类型名称 用户登录 paraMap.put("op_level_id", "3");// 级别 * paraMap.put("operate_result", "1");// 操作结果 0-成功 * paraMap.put("operate_time", DateUtil.date2String(new Date(), * "YYYY-MM-DD HH:mm:ss"));// 操作时间 * * paraMap.put("operate_content", "操作内容描述");// paraMap.put("object_id", * "1-文件、2-库表、3-进程、4-菜单");// paraMap.put("object_name", "对象类型名称 汉字");// * * paraMap.put("client_address", "127.0.0.1");// * paraMap.put("server_address", "服务器ip");// paraMap.put("sql_tables", * "该操作涉及的表名集合 表名1||表名2");// paraMap.put("sql_where_conditions", * "例如:表名1.条件字段1=‘参数1’||表名2.条件字段1=‘参数2’");// return paraMap; } // 主方法,进行测试 * public static void main(String[] args) { A4LogDao dao = new A4LogDao(); * Date startDate = DateUtil.nextHour(new Date(), -1000); * dao.insert(getMap()); * * } */ private String insert_sql; private String select_sql; public int insert(final Map<String, String> paraMap) { final String logMsg = new JSONObject(paraMap).toString(); log.info("insert into logMsg:" + logMsg); log.info("insert_sql:" + insert_sql); int i =-1; try { i = super.getJdbcTemplate().update(insert_sql, new PreparedStatementSetter() { @Override public void setValues(PreparedStatement ps) throws SQLException { ps.setString(1, paraMap.get("main_account_name")); ps.setString(2, paraMap.get("op_level_id")); ps.setString(3, logMsg); Timestamp date = new Timestamp(new Date().getTime()); // Timestamp date = new Timestamp(DateUtil.nextDate( // new Date(), // -4).getTime()); ps.setTimestamp(4, date); } }); } catch (Exception e) { log.info(e.getMessage()); log.info(e+" "+e.getLocalizedMessage()); e.getStackTrace(); log.info("insert log fail"); log.info("fail logMsg:"+logMsg); } return i; } public List<String> query(Date startDate, Date endDate) { List<String> dataList = new ArrayList<String>(); Timestamp date1 = new Timestamp(startDate.getTime()); Timestamp date2 = new Timestamp(endDate.getTime()); dataList = (List<String>) super.getJdbcTemplate().queryForList( select_sql, new Object[] { date1, date2 }, String.class); return dataList; } public void setInsert_sql(String insert_sql) { this.insert_sql = insert_sql; } public void setSelect_sql(String select_sql) { this.select_sql = select_sql; } }
调用测试
每天凌晨1点上传昨天的日志 ------------------------------------------------------------------ Timer timer = new Timer(); LogTask task = new LogTask(); LogTask.a4LogDao = a4LogDao; try { Date today = new SimpleDateFormat("yyyy-MM-dd").parse(DateUtil.getToday());//精确到天的时间 2013-10-22 Date startTask = DateUtil.nextHour(today, 25);//每天凌晨1点上传昨天的日志 long step = 1*24*60*60*1000; //时间间隔为24小时 timer.schedule(task, startTask, step); } catch (ParseException e) { } ---------------------------------------------------------------------- //上传当天日志 // if("OFF".equals(A4switch)) return; Timer timer = new Timer(); LogTask task = new LogTask(); task.setUpLoadTodayLog(true); LogTask.a4LogDao = a4LogDao; timer.schedule(task, new Date());
相关推荐
abap 上传文件到ftp 比较使用的实例,大家可以学习。
知识点四:FTP上传文件的实现 在本程序中,我们使用了ftpUploadFile函数来上传日志文件到FTP服务器。该函数使用了ftp库提供的上传文件功能,实现了自动上传日志文件的功能。 知识点五:时间处理的实现 在本程序中...
FTP(File Transfer Protocol)是一种基于TCP/IP协议的...综上所述,FTP上传涉及到网络通信、身份验证、文件操作等多个方面,理解并熟练运用FTP上传能有效提高工作效率,特别是在需要跨网络共享和管理文件的环境中。
本程序在VS2010环境下进行开发,程序用C# WinForm实现了FTP上传下载(可实现上传所选目录下的所有文件)并带上传进度条,程序会在运行根目录下自动生成日志文件以方便查看信息...本程序主要由socket进行通信...程序由...
在IT行业中,定时FTP上传文件是一项常见的自动化任务,尤其对于监控、数据分析或者备份等场景尤为重要。这个任务涉及到几个关键知识点,下面将详细讲解。 首先,我们要理解“定时”这一概念。在计算机领域,定时...
在提供的压缩包文件中,"版本说明.txt"可能是关于该FTP上传程序的详细版本信息和更新日志,帮助用户了解软件的最新改进和修复的问题。"Auto_PowerMain"可能是一个自动化的主程序文件,负责执行FTP上传操作的核心逻辑...
FTP上传带进度通常需要实现以下几个关键点: 1. **FTP协议理解**:FTP是互联网上文件传输的基础协议,它定义了客户端和服务器之间交换文件的规则。易语言FTP上传功能需要理解和实现FTP协议的命令,如`STOR`用于上传...
该脚本用于产生日志文件,并上传到指定FTP服务器上查询使用。 自动检查FTP服务器是否ping通,如果ping不通则脚本不运行。 自动加入启动项,自动制定计划任务,定时运行。 可在脚本内指定时间段内不运行。 根据设置...
本源码示例着重讲解如何实现FTP文件上传下载的功能,并结合日志配置和使用,以便在程序运行过程中记录操作详情,便于问题排查和系统监控。 1. FTP文件上传下载: - FTP连接:首先需要建立一个FTP连接,这通常涉及...
FTP上传工具则是专门辅助用户通过FTP协议进行文件传输的应用软件。这类工具简化了操作流程,提高了文件传输的效率和安全性。 FTP上传工具的核心功能包括: 1. **连接管理**:用户可以保存和管理多个FTP服务器的...
Java作为多平台支持的编程语言,提供了丰富的库和API来实现FTP文件上传功能。本篇文章将详细探讨如何使用Java实现FTP文件上传,以及相关类的作用。 首先,我们来看标题和描述中的关键词"java实现的ftp文件上传",这...
FTP工具类,包括:文件夹上传下载,文件删除(包括非空文件夹),重命名等操作 基本的操作应该都有
Java FTP上传是一个在Java编程环境中实现文件传输协议(FTP)的关键技术,用于在本地计算机与远程服务器之间交换文件。FTP上传功能通常包括断点续传和进度显示,这对于大型文件的传输尤其重要,因为它们允许在中断后...
"FTP上传绿色版"指的是一个轻量级、无需安装、可直接运行的FTP客户端软件,这类软件通常不写入系统注册表,不占用过多系统资源,方便携带和使用。 FileZilla是全球广泛使用的FTP客户端之一,它提供了丰富的功能,...
9. **日志和错误报告**:为了帮助用户诊断问题,FTP XP可能会记录传输日志,并在发生错误时提供详细的错误信息。 压缩包中的文件`FileZilla_3.2.4.1_win32-setup.exe`可能是FTP XP的安装程序,FileZilla是一个非常...
此外,为了减少传输量和提高分析效率,代理还可以对日志进行聚合,例如统计每个用户的总上传/下载流量。 5. **实时监控**:代理可能具有实时监控功能,可以即时报警当检测到异常活动,如频繁的失败登录尝试、大文件...
UTL_FTP包包含了一系列过程和函数,如`FTP_OPEN`用于建立与FTP服务器的连接,`FTP_PUT`用于上传文件,`FTP_GET`用于下载文件,以及`FTP_CLOSE`用于关闭连接。以下是使用这些函数的基本步骤: 1. **连接FTP服务器**...
FTP上传工具是专门设计用于简化这一过程的应用程序,尤其对那些需要频繁进行网站维护、更新内容或者上传大量文件的专业人士来说,它们是不可或缺的工具。 FTP上传工具提供了许多实用功能,例如: 1. **图形化界面*...
FTP日志批量上传.sh
- 增加日志记录功能,记录每次上传的详细情况,便于后续追踪问题。 - 支持多线程上传,提高大文件的上传效率。 - 添加文件完整性校验功能,确保文件上传后与原始文件一致。 综上所述,“vbs自动上传ftp”脚本不仅...