打印日志文件并将其上传存到HDFS中

在本地打印日志 , 对日志文件进行分析 , 把需要上传的日志文件移动到待上传目录 , 将待上传的日志文件逐个上传到HDFS , 并移动到备份目录 , 定期清理过期备份日志 .


1.首先生产日志文件:


  
  
  1. /**
  2. * 生产日志
  3. * @author Administrator
  4. *
  5. */
  6. public class MoreLog {
  7. public static void main(String[] args) throws Exception {
  8. Logger logger = LogManager.getLogger(MoreLog.class);
  9. System.out.println( "开始打印日志了");
  10. while( true){
  11. logger.info( "张俊杰zhangjunjie张俊杰zhangjunjie张俊杰zhangjunjie");
  12. Thread.sleep( 1);
  13. }
  14. }
  15. }

2.启动日志采集和日志清理


  
  
  1. /**
  2. * 启动日志采集
  3. * 和日志清理
  4. * @author Administrator
  5. *
  6. */
  7. public class StartUp {
  8. public static void main(String[] args) {
  9. Timer timer = new Timer();
  10. //上传
  11. timer.schedule( new ClollactionTask(), 0, 2* 60* 1000l);
  12. //清理文件
  13. timer.schedule( new ClearTask(), 0, 24* 60* 1000);
  14. }
  15. }

3.日志采集并上传HDFS


  
  
  1. import java.io.File;
  2. import java.io.FilenameFilter;
  3. import java.net.InetAddress;
  4. import java.net.URI;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.TimerTask;
  8. import org.apache.commons.io.FileUtils;
  9. import org.apache.hadoop.conf.Configuration;
  10. import org.apache.hadoop.fs.FileSystem;
  11. import org.apache.hadoop.fs.Path;
  12. /**
  13. * 日志采集的:
  14. * 1.从日志目录里面查看哪些需要上传(1.2.3.....)
  15. * 2.把需要上传的文件移动到待上传文件
  16. * 3.上传到hdfs上(/log/2018-8-20/xxx.log)
  17. * 4.将上传完成的日志文件移动到备份目录
  18. * @author Administrator
  19. *
  20. */
  21. public class ClollactionTask extends TimerTask{
  22. @Override
  23. public void run() {
  24. System.out.println( "开始执行任务");
  25. try {
  26. SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd-HH-mm");
  27. String datetime = format.format( new Date());
  28. // 1:查看哪些文件是需要上传的
  29. File logDir = new File( "e:/testlog/");
  30. File[] listFiles = logDir.listFiles( new FilenameFilter() {
  31. // FileNameFilter 是过哪些文件能够获取的
  32. @Override
  33. public boolean accept(File dir, String name) {
  34. return name.startsWith( "test.log.");
  35. }
  36. });
  37. // 2:将文件移动到待上传目录
  38. for (File file : listFiles) {
  39. // file.renameTo(new File(""));
  40. FileUtils.moveFileToDirectory(file, new File( "e:/waitUpLoad"), true);
  41. }
  42. //3:将待上传的文件逐个上传到hdfs上,并移动到备份目录
  43. FileSystem fs = FileSystem.get( new URI( "hdfs://hadoop01:9000"), new Configuration(), "root");
  44. Path detPath = new Path( "/log/"+datetime.substring( 0, 10));
  45. //判断待上传的目录是否存在,不存在则创建一个(hdfs上的文件夹)
  46. boolean exists = fs.exists(detPath);
  47. if(!exists){
  48. fs.mkdirs(detPath);
  49. }
  50. //判断备份目录是否存在
  51. File backDir = new File( "e:/backDir/"+datetime);
  52. boolean exists2 = backDir.exists();
  53. if(!exists2){
  54. backDir.mkdirs();
  55. }
  56. //得到上传的是哪一个服务上的日志文件
  57. String hostName = InetAddress.getLocalHost().getHostName();
  58. //4:遍历待上传的目录
  59. File file = new File( "e:/waitUpLoad");
  60. File[] listFile = file.listFiles();
  61. for (File f : listFile) {
  62. //上传到hdfs上
  63. fs.copyFromLocalFile( new Path(f.getPath()), new Path(detPath,hostName+ "_"+f.getName()+ "_"+System.currentTimeMillis()));
  64. //cp到备份目录
  65. FileUtils.moveFileToDirectory(f, backDir, true);
  66. }
  67. fs.close();
  68. } catch (Exception e) {
  69. e.getStackTrace();
  70. }
  71. }
  72. }

4.清理过期日志


  
  
  1. import java.io.File;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.TimerTask;
  5. import org.apache.commons.io.FileUtils;
  6. /**
  7. * 清理过期日志
  8. * @author Administrator
  9. *
  10. */
  11. public class ClearTask extends TimerTask {
  12. @Override
  13. public void run() {
  14. try {
  15. SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd-HH-mm");
  16. Date nowdate = new Date();
  17. File file = new File( "E:/backDir");
  18. File[] listFiles = file.listFiles();
  19. for (File dir : listFiles) {
  20. String name = dir.getName();
  21. Date dirdate = format.parse(name);
  22. if(nowdate.getTime() - dirdate.getTime() > 24* 60* 60* 1000) {
  23. FileUtils.deleteDirectory(dir);
  24. }
  25. }
  26. } catch (Exception e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

附:log4j配置文件


  
  
  1. log4j.rootLogger =ALL,systemOut,logRollingFile
  2. #log4j.rootLogger =ALL,systemOut,logFile,logDailyFile,logRollingFile,logMail,logDB
  3. #\u8F93\u51FA\u5230\u63A7\u5236\u53F0
  4. log4j.appender.systemOut = org.apache.log4j.ConsoleAppender
  5. log4j.appender.systemOut.layout = org.apache.log4j.PatternLayout
  6. log4j.appender.systemOut.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  7. log4j.appender.systemOut.Threshold = DEBUG
  8. log4j.appender.systemOut.ImmediateFlush = TRUE
  9. log4j.appender.systemOut.Target = System.out
  10. #\u8F93\u51FA\u5230\u6587\u4EF6
  11. log4j.appender.logFile = org.apache.log4j.FileAppender
  12. log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
  13. log4j.appender.logFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  14. log4j.appender.logFile.Threshold = WARN
  15. log4j.appender.logFile.ImmediateFlush = TRUE
  16. log4j.appender.logFile.Append = TRUE
  17. log4j.appender.logFile.File = ../Struts2/WebRoot/ log/File/log4j_Struts.log
  18. log4j.appender.logFile.Encoding = UTF- 8
  19. #\u6309DatePattern\u8F93\u51FA\u5230\u6587\u4EF6
  20. log4j.appender.logDailyFile = org.apache.log4j.DailyRollingFileAppender
  21. log4j.appender.logDailyFile.layout = org.apache.log4j.PatternLayout
  22. log4j.appender.logDailyFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  23. log4j.appender.logDailyFile.Threshold = DEBUG
  24. log4j.appender.logDailyFile.ImmediateFlush = TRUE
  25. log4j.appender.logDailyFile.Append = TRUE
  26. log4j.appender.logDailyFile.File = ../Struts2/WebRoot/ log/DailyFile/log4j_Struts
  27. log4j.appender.logDailyFile.DatePattern = '.'yyyy-MM-dd-HH-mm '.log'
  28. log4j.appender.logDailyFile.Encoding = UTF- 8
  29. #\u8BBE\u5B9A\u6587\u4EF6\u5927\u5C0F\u8F93\u51FA\u5230\u6587\u4EF6
  30. log4j.appender.logRollingFile = org.apache.log4j.RollingFileAppender
  31. log4j.appender.logRollingFile.layout = org.apache.log4j.PatternLayout
  32. log4j.appender.logRollingFile.layout.ConversionPattern = [%- 5p][%- 22d{yyyy/MM/dd HH:mm:ssS}][%l]%n%m%n
  33. log4j.appender.logRollingFile.Threshold = DEBUG
  34. log4j.appender.logRollingFile.ImmediateFlush = TRUE
  35. log4j.appender.logRollingFile.Append = TRUE
  36. log4j.appender.logRollingFile.File = e: /testlog/test.log
  37. log4j.appender.logRollingFile.MaxFileSize = 1MB
  38. log4j.appender.logRollingFile.MaxBackupIndex = 50
  39. log4j.appender.logRollingFile.Encoding = UTF- 8
  40. #\u7528Email\u53D1\u9001\u65E5\u5FD7
  41. log4j.appender.logMail = org.apache.log4j.net.SMTPAppender
  42. log4j.appender.logMail.layout = org.apache.log4j.HTMLLayout
  43. log4j.appender.logMail.layout.LocationInfo = TRUE
  44. log4j.appender.logMail.layout.Title = Struts2 Mail LogFile
  45. log4j.appender.logMail.Threshold = DEBUG
  46. log4j.appender.logMail.SMTPDebug = FALSE
  47. log4j.appender.logMail.SMTPHost = SMTP. 163.com
  48. log4j.appender.logMail.From = xly300 0@163.com
  49. log4j.appender.logMail.To = xly300 0@gmail.com
  50. #log4j.appender.logMail.Cc = [email protected]
  51. #log4j.appender.logMail.Bcc = [email protected]
  52. log4j.appender.logMail.SMTPUsername = xly300 0
  53. log4j.appender.logMail.SMTPPassword = 1234567
  54. log4j.appender.logMail.Subject = Log4j Log Messages
  55. #log4j.appender.logMail.BufferSize = 1024
  56. #log4j.appender.logMail.SMTPAuth = TRUE
  57. #\u5C06\u65E5\u5FD7\u767B\u5F55\u5230MySQL\u6570\u636E\u5E93
  58. log4j.appender.logDB = org.apache.log4j.jdbc.JDBCAppender
  59. log4j.appender.logDB.layout = org.apache.log4j.PatternLayout
  60. log4j.appender.logDB.Driver = com.mysql.jdbc.Driver
  61. log4j.appender.logDB.URL = jdbc:mysql: // 127.0. 0. 1: 3306/xly
  62. log4j.appender.logDB.User = root
  63. log4j.appender.logDB.Password = 123456
  64. log4j.appender.logDB.Sql = INSERT INTOT_log4j(project_name,create_date,level,category,file_name,thread_name,line,all_category,message) values( 'Struts2', '%d{yyyy-MM-ddHH:mm:ss}', '%p', '%c', '%F', '%t', '%L', '%l', '%m')

猜你喜欢

转载自blog.csdn.net/qq_40468327/article/details/88676511