精华内容
下载资源
问答
  • 日志生成器 Java 中的日志生成器,用于模拟真实日志。
  • swagger接口日志生成工具:里面包含工具类、使用方法、配置方法
  • 日志生成

    2014-05-01 07:30:16
    魔法日志生成
  • 工作日志生成器.rar

    2019-10-25 15:55:19
    工作日志生成器rar,工作日志生成
  • 系统日志生成

    2013-05-18 16:49:37
    搜集系统的各种服务、安全、应用程序日志,判断系统出现的问题
  • Python模拟日志生成

    千次阅读 2019-12-30 00:42:44
    0x00 文章内容 0x01 编写Python代码 1. 完整代码 0x02 生成日志 1. Linux定时调度工具的使用 2. 验证日志是否生成(Linux) 3. 验证日志是否生成(Windows) 0xFF 总结

    0x00 文章内容

    1. 编写Python代码
    2. 生成日志

    文章的内容与教程:Java模拟定时生成日志到文件 相类似,此文章用Python语言来实现。

    0x01 编写Python代码

    1. 完整代码

    a. 新建一个generate_log.py文件,添加下面代码:

    #coding=UTF-8
    
    import random
    import time
    url_paths = [
        "article/112.html",
        "article/113.html",
        "article/114.html",
        "article/115.html",
        "article/116.html",
        "article/117.html",
        "article/118.html",
        "article/119.html",
        "video/821",
        "tag/list"
    ]
    
    ip_splices = [102,71,145,33,67,54,164,121]
    
    http_referers = [
        "https://www.baidu.com/s?wd={query}",
        "https://www.sogou.com/web?query={query}",
        "https://cn.bing.com/search?q={query}",
        "https://search.yahoo.com/search?p={query}"
    ]
    
    search_keyword = [
        "复制粘贴玩大数据",
        "Bootstrap全局css样式的使用",
        "Elasticsearch的安装(windows)",
        "Kafka的安装及发布订阅消息系统(windows)",
        "window7系统上Centos7的安装",
        "复制粘贴玩大数据系列教程说明",
        "Docker搭建Spark集群(实践篇)"
    ]
    
    status_codes = ["200","404","500"]
    
    def sample_url():
        return random.sample(url_paths,1)[0]
    
    def sample_ip():
        splice = random.sample(ip_splices,4)
        return ".".join([str(item) for item in splice])
    
    def sample_referer():
        if random.uniform(0, 1) > 0.2:
            return "-"
        refer_str = random.sample(http_referers, 1)
        query_str = random.sample(search_keyword, 1)
        return refer_str[0].format(query=query_str[0])
    
    def sample_status_code():
        return random.sample(status_codes, 1)[0]
    
    def generate_log(count = 10):
    
        time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
    
        f = open("D:\\python-logs.txt","w+")
    
        while count >= 1:
            generate_log = "{ip}\t{localtime}\t \"GET /{url} HTTP/1.1 \" \t{referer}\t{code}".format(
                url = sample_url(),
                ip = sample_ip(),
                referer = sample_referer(),
                code = sample_status_code(),
                localtime = time_str
                )
            print generate_log
            f.write(generate_log + "\n")
            count = count - 1
    
    # URL    IP信息        referer        状态码    日志访问时间
    if __name__ == '__main__':
        generate_log(100)
    

    0x02 生成日志

    1. Linux定时调度工具的使用

    a. crontab的介绍

    用法请参考网站:http://tool.lu/crontab
    网站有三种类型的用法: Linux Java(Spring) Java(Quartz)

    此次以Linux为例,如每一分钟执行一次的crontab表达式:
    */1 * * * *

    CRON表达式:
    */1 * * * *
    
    接下来7次的执行时间:
    2019-12-30 00:12:00
    2019-12-30 00:13:00
    2019-12-30 00:14:00
    
    说明:
    Linux
    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    +--------------- day of month (1 - 31)
    |    +-------------------- hour (0 - 23)
    +------------------------- minute (0 - 59)
    

    PS:Linux最快频率只能是分钟级别,如果需要更小,可自己搜索资料解决。

    b. Python模拟日志生成使用方法
    vi /home/hadoop-sny/shell/log_generator.sh

    添加内容:
    python /home/hadoop-sny/shell/generate_log.py

    赋予日志生成脚本执行权限
    chmod u+x log_generator.sh

    generate_log.py放于/home/hadoop-sny/shell文件夹中

    c. 定时器的设定
    crontab -e

    然后加入内容:
    */1 * * * * /home/hadoop-sny/shell/log_generator.sh

    如果需要修改路径,可修改此行代码:
    f = open("D:\\python-logs.txt","w+")
    示例:
    f = open("/home/hadoop-sny/logs/access.log","w+")

    2. 验证日志是否生成(Linux)

    此时可以输date以查看当前系统的时间
    观察一分钟后,所设置的文件是否有日志生成:
    tail -200f /home/hadoop-sny/logs/access.log

    3. 验证日志是否生成(Windows)

    a. 执行脚本,则可生成100条日志,路径为;D:\\python-logs.txt

    python generate_log.py
    在这里插入图片描述
    生成了一百条日志:
    在这里插入图片描述

    0xFF 总结

    1. 通过本教程实现Python模拟日志生成,与Java模拟日志生成做比较,可以理解Java语言与Python语言语法区别。

    作者简介:邵奈一
    全栈工程师、市场洞察者、专栏编辑
    | 公众号 | 微信 | 微博 | CSDN | 简书 |

    福利:
    邵奈一的技术博客导航
    邵奈一 原创不易,如转载请标明出处。


    展开全文
  • ASP搜索引擎蜘蛛爬行日志生成程序 59878影视:http://59878.net
  • 重写log4j.jar中的日志生成策略,按月或者按照规定的数量生成,超出则删除
  • c 语言日志生成程序

    2012-07-31 15:14:07
    c语言生成日志程序,可以实现简单的分级,日志纪要等
  • 一个VC++的日志生成类 附完整源码例子,编译生成EXE后,在Debug目录下生成txt格式的日志文件,记录程序运行的每一个环节,可扩展成操作日志、维护日志等,源码编译运行截图如图所示。 运行环境:Windows/Visual C/...
  • 日志无忧功能很简单,添加项目,添加步骤,删除节点,保存结构,清空结构,生成日志,复制生成的内容。 相信对于大部分工作都够用了,工作日志这东西,不创造什么价值,很多人也不重视,但老板希望看到员工的工作...
  • 现有的日志保护机制主要解决事件日志生成后的数据完整性保护方面的问题,但对于日志数据生成阶段的可信生成方面还没有解决.本文主要贡献是提出了一种基于TCM模块的可信事件日志生成方法,为事件日志提供了生成时的...
  • 使用 kafka 从简单的 log4j 日志生成中实时流式传输日志 先决条件 基于zookeeper集群的运行kafka服务器 日志生成器 使用log4j构建简单的日志,实时生成并每0.5秒保存到日志文件中 Log Streamer(在 kafka 中称为...
  • 一个早期写的C 日志生成类,好像是老外写的,虽然这么多年了,但还是有很多人在用这个日志类。程序界面没什么功能,不过用它生成的的日志文件都在Debug目录下。
  • C++ 生成日志文件

    2018-08-01 17:28:59
    C++ 写日志实现的类。详细使用可以看https://blog.csdn.net/xinshuwei/article/details/81334657或者私聊我
  • HTTP 日志生成器 HTTP Log Consumer Monitor 项目的日志生成器 说明: 运行项目并输入要写入日志文件的日志数量。 代码在无限循环中运行,并在每次写入后等待用户输入。
  • 用于配置tomcat生成日志的分类,按照日期一天一个文件,查阅起来方便,当然配置方式多种多样
  • 前言:log4j可以很方便的管理日志,除了按时间,按内容大小等之外生成日志,有时候我们希望能够自己设置日志生成方法,比如每次运行程序即生成一个独立的日志,以及将日志名称按照自己的想法进行设置。 1:首先,...

    前言:log4j可以很方便的管理日志,除了按时间,按内容大小等之外生成日志,有时候我们希望能够自己设置日志的生成方法,比如每次运行程序即生成一个独立的日志,以及将日志名称按照自己的想法进行设置。

    1:首先,这是我的log4j.properties的配置【日志路径后面是.log】

        log4j.rootLogger = ALL,logFile
        log4j.appender.logFile = org.apache.log4j.MyFileAppender
        log4j.appender.logFile.layout = org.apache.log4j.PatternLayout
        log4j.appender.logFile.File = D:/temp/.log
        log4j.appender.logFile.Threshold = DEBUG
        log4j.appender.logFile.ImmediateFlush = TRUE
        log4j.appender.logFile.layout.ConversionPattern = %d{ABSOLUTE} %5p %c - %m%n
    2:接下来我们看一下     org.apache.log4j.MyFileAppender   这个类的写法

    package org.apache.log4j;
    import java.io.File;
    import java.io.FilenameFilter;
    import java.io.IOException;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import org.apache.log4j.FileAppender;
    import org.apache.log4j.Layout;
    import org.apache.log4j.spi.ErrorCode;
    /**
     * FileAppender是log4j包中的类,这里需要继承它
     * @author tang
     */
     public class MyFileAppender extends FileAppender {
    
    	public String LoggerNamePrefix = getCurrentClassName();
    	private static final String DOT = ".";
    	private static final String UNDERLINE = "_";
    
    	public MyFileAppender() {
    	}
    
    	public MyFileAppender(Layout layout, String filename, boolean append,
    			boolean bufferedIO, int bufferSize) throws IOException {
    		super(layout, filename, append, bufferedIO, bufferSize);
    	}
    
    	public MyFileAppender(Layout layout, String filename, boolean append)
    			throws IOException {
    		super(layout, filename, append);
    	}
    
    	public MyFileAppender(Layout layout, String filename) throws IOException {
    		super(layout, filename);
    	}
    
    	/**
    	 * 这里获取执行主程序的类名,作为日志名称前缀
    	 * @author tang
    	 */
    	public static String getCurrentClassName() {
    		StackTraceElement[] ste = Thread.currentThread().getStackTrace();
    		String className = ste[ste.length - 1].getClassName();
    		int lastIndexOf = className.lastIndexOf(".") + 1;
    		String currentClassName = className.substring(lastIndexOf);
    		return currentClassName;
    	}
    
    	/**
    	 * 父类方法 fileName路径后面有个.log
    	 * @author tang
    	 */
    	public void activateOptions() {
    		if (fileName != null) {
    			try {
    				fileName = getNewLogFileName();
    				setFile(fileName, fileAppend, bufferedIO, bufferSize);
    			} catch (Exception e) {
    				errorHandler.error("Error while activating log options", e,
    						ErrorCode.FILE_OPEN_FAILURE);
    			}
    		}
    	}
    
    	/**
    	 * 获取下一个要生成的日志的全路径
    	 * @return
    	 */
    	private String getNewLogFileName() {
    		if (fileName != null) {
    			final String LEFTPARENTHESIS = "(";
    			final String RIGHTPARENTHESIS = ")";
    			final File logFile = new File(fileName);
    			final String fileName = logFile.getName();
    			final int dotIndex = fileName.indexOf(DOT);
    			String newFileName = "";
    			Integer number = -1;
    			File[] files = logFile.getParentFile().listFiles(new CustomFilter());
    			Pattern pattern = Pattern.compile("(?<=\\()[\\d]+");
    			// 首次创建为false
    			if (files != null && files.length > 0) {
    				number++;
    				for (File file : files) {
    					Matcher matcher = pattern.matcher(file.getName());
    					if (matcher.find()) {
    						if (number < Integer.valueOf(matcher.group(0))) {
    							number = Integer.valueOf(matcher.group(0));
    						}
    					}
    				}
    			} else {
    				// 避免首次名称bug,补充else
    				number++;
    			}
    			// 设置日志名
    			if (dotIndex != -1) {
    				String tempFileName = fileName.substring(0, dotIndex);
    				final int parenthesis = tempFileName.indexOf(LEFTPARENTHESIS);
    				if (parenthesis != -1) {
    					tempFileName = tempFileName.substring(parenthesis);
    				}
    				if (number > -1) {
    					newFileName = LoggerNamePrefix + UNDERLINE + tempFileName
    							+ LEFTPARENTHESIS + (++number) + RIGHTPARENTHESIS
    							+ fileName.substring(dotIndex);
    				} else {
    					newFileName = LoggerNamePrefix + UNDERLINE + tempFileName
    							+ fileName.substring(dotIndex);
    				}
    			} else {
    				// 是否存在文件名中存在()
    				if (number > -1) {
    					newFileName = LoggerNamePrefix + UNDERLINE + fileName
    							+ LEFTPARENTHESIS + (++number) + RIGHTPARENTHESIS;
    				} else {
    					newFileName = LoggerNamePrefix + UNDERLINE + fileName;
    				}
    			}
    			// 格式化日志名
    			return logFile.getParent() + File.separator + newFileName;
    		}
    		return null;
    	}
    
    	// 获取当年文件夹下的日志文件
    	class CustomFilter implements FilenameFilter {
    
    		public boolean accept(File dir, String name) {
    			File logFile = new File(fileName);
    			String fileName = logFile.getName();
    			int indexDot = fileName.lastIndexOf(DOT);
    			if (indexDot != -1) {
    				return name.startsWith(LoggerNamePrefix + UNDERLINE
    						+ fileName.substring(0, indexDot));
    			} else {
    				return name.startsWith(LoggerNamePrefix + UNDERLINE + fileName);
    			}
    		}
    	}
    }
    3. 如果我们执行的主程序的类为MainTest.java,那么生成的日志文件如下所示【每次执行均生成一个】
    MainTest_(1).log
    MainTest_(2).log
    MainTest_(3).log
    MainTest_(4).log
    MainTest_(5).log
    好了,现在我们的日志就会随着我们主类名的不同而形成不同的日志文件了。

    展开全文
  • log日志生成,有日志分类规划,日志按照时间生成,为cocos2dx平台下开发,但是只在win环境下测试通过,其他环境未进行测试
  • ****************************************** java.util.logging包中主要的类有以下几个: ...LogManager 存在一个单一的全局 LogManager 对象,它可用于维护 Logger 和日志服务的一组共享状态。 Logger

    http://www.tuicool.com/articles/vy6Zrye

    ******************************************

    java.util.logging包中主要的类有以下几个:

    LogManager    存在一个单一的全局 LogManager 对象,它可用于维护 Logger 和日志服务的一组共享状态。
    Logger        Logger 对象用来记录特定系统或应用程序组件的日志消息
    LogRecord     LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求
    Handler       Handler 对象从 Logger 中获取日志信息,并将这些信息导出
    Formatter     Formatter 为格式化 LogRecords 提供支持

    简单的来说:

    LogManager是一个存放Logger的工厂,我们每次生成Logger时,如果是新的Logger(Logger的名字在LoggerManager中不存在),那么将在LogManager中生成一个新的Logger,如果是已有的Logger,那么直接取之并使用。 

    Logger logDemo = Logger.getLogger("log.demo");    // 在Logger工厂(LogManager)中生成一个名为log.demo的日志管理器,

    当使用Logger来生成一条日志时,其将首先将日志保存在LogRecord中,并将LogRecord传送给Handler进行导出工作,当然如果需要对导出内容进行格式化处理,那么就需要在Handler导出日志前,为Handler指定一个日志格式化处理器,也就是Formatter干的工作。

    logDemo.severe("this is a severe log");    // 记录一条日志级别为Level.SEVERE的日志消息

    运行程序将看到控制台输入消息:

    五月 24, 2015 7:44:10 上午 cn.kolbe.java.log.LogDemo main
    严重: this is a severe log

    在这有个疑问,前面说过LogRecord负责记录消息,Handler负责日志导出,Formatter负责日志格式化,可是为何上面我们并没有显示将消息传递给LogRecord,也没有显示为Logger添加Handler,更没有为Handler添加Formatter,其就自动的在控制台(System.err)中输出消息了!为了解除疑问,让我们看一下Logger的源代码中的severe()方法

     1 public class Logger {
     2     public void severe(String msg) {
     3         log(Level.SEVERE, msg);
     4     }
     5     public void log(Level level, String msg) {
     6         if (!isLoggable(level)) {
     7             return;
     8         }
     9         LogRecord lr = new LogRecord(level, msg);
    10         doLog(lr);
    11     }
    12     private void doLog(LogRecord lr) {
    13         lr.setLoggerName(name);
    14         final LoggerBundle lb = getEffectiveLoggerBundle();
    15         final ResourceBundle  bundle = lb.userBundle;
    16         final String ebname = lb.resourceBundleName;
    17         if (ebname != null && bundle != null) {
    18             lr.setResourceBundleName(ebname);
    19             lr.setResourceBundle(bundle);
    20         }
    21         log(lr);
    22     }
    23     public void log(LogRecord record) {
    24         if (!isLoggable(record.getLevel())) {
    25             return;
    26         }
    27         Filter theFilter = filter;
    28         if (theFilter != null && !theFilter.isLoggable(record)) {
    29             return;
    30         }
    31 
    32         // Post the LogRecord to all our Handlers, and then to
    33         // our parents' handlers, all the way up the tree.
    34 
    35         Logger logger = this;
    36         while (logger != null) {
    37             final Handler[] loggerHandlers = isSystemLogger
    38                 ? logger.accessCheckedHandlers()
    39                 : logger.getHandlers();
    40 
    41             for (Handler handler : loggerHandlers) {
    42                 handler.publish(record);
    43             }
    44 
    45             final boolean useParentHdls = isSystemLogger
    46                 ? logger.useParentHandlers
    47                 : logger.getUseParentHandlers();
    48 
    49             if (!useParentHdls) {
    50                 break;
    51             }
    52 
    53             logger = isSystemLogger ? logger.parent : logger.getParent();
    54         }
    55     }
    56 }

    从源码中可以看到

    1)severe()方法中调用了public void log(Level level, String msg)方法,将日志消息级别设置为Level.SEVERE,

    2)在log(Level level, String msg)方法中可以看到,其生成了一个 LogRecord对象,也就是日志消息对象

    3)接着又调用了private void doLog(LogRecord lr)方法,该方法主要是设置本地化语言包,暂且跳过

    4)最后调用public void log(LogRecord record)方法,在该方法中有个while循环,首先通过Logger类中的getHandlers()方法,获取当前Logger对象中已经设置的Handler对象,然后调用Handler类中的publish()方法打印日志消息记录 (可是我们并没有设置Handler啊?接着往下看)

    5)在循环体底下可以看到logger = isSystemLogger ? logger.parent : logger.getParent();该语句的作用是遍历logger对象中的父对象,并将LogRecord传递给父对象的Handler

    6)

    Logger parent = logDemo.getParent();
    System.out.println("parent.getName() : " + parent.getName());
    System.out.println("parent.getClass().getName() : " + parent.getClass().getName());

    控制台输入:

    parent.getName() : 
    parent.getClass().getName() : java.util.logging.LogManager$RootLogger

    发现Logger的默认根日志对象是LogManager的内部类RootLogger类的对象,并且根日志对象的名字为空白字符!

    让我们验证一下:

    Logger rootLog = Logger.getLogger("");
    System.out.println("rootLog.getClass().getName() : " + rootLog.getClass().getName());

    控制台输出:

    rootLog.getClass().getName() : java.util.logging.LogManager$RootLogger 

    另外让我们再看一下根Log是否有默认的Handler对象:

    Handler[] handlers = rootLog.getHandlers();
    for(int i = 0; i < handlers.length; i++) {
      System.out.println(handlers[i].getClass().getName());
    }

    控制台输出:

    java.util.logging.ConsoleHandler

    原来根Log默认装配了ConsoleHandler(对应的是控制台输出)所以在我们生成日志消息时没有显示指定Handler时,其也能在控制台中输入日志消息,你可能会问,根Log是在什么时候生成的?其是在我们应用程序中第一次调用Logger.getLogger("log name")时由LogManager对象进行装配的。具体过程将在下次进行解析。

    注:另外文中忽略了Level(Log日志级别):用来控制日志发布的级别,以及Filter(Log日志过滤):用来鉴定消息是否应发布给LogRecord或者直接丢弃。这块内容将找个时间补上。


    展开全文
  • vb程序日志生成

    2012-02-13 17:24:22
    方便的生成程序日志生成日志将帮助你调试自己的程序
  • 为了比较直观地了解错误原因,本人在程序中加入了异常捕获模块并自动生成错误日志。 下面,我将用一个例子来实现上述功能的实现。例子主要实现数值相减,如果输入的不是数字,那么程序是会报错的,那么此时应该会在...

    最近,本人在做一个预测项目。我的工作主要是从数据库中提取数据分析、进行数值预测、将预测值存储数据库、程序打包exe等。在实际的exe文件运行过程中可能会因为各种原因导致程序关闭,无法了解错误原因。为了比较直观地了解错误原因,本人在程序中加入了异常捕获模块并自动生成错误日志。

    下面,我将用一个例子来实现上述功能的实现。例子主要实现数值相减,如果输入的不是数字,那么程序是会报错的,那么此时应该会在程序路径下生成一个txt格式的错误日志。

    话不多说,直接上代码。

    import os
    
    if __name__ == '__main__':
        try:
            a = 1
            print('请输入一个数字')
            b = input()
            c = a-int(b)
            print('%d-%d=%d' % (a, int(b), c))
        except Exception as err:
            print("err %s: " % err)
            rootDir = os.path.split(os.path.realpath(__file__))[0]
            blogpath = os.path.join(rootDir, 'test1.txt')
            f = open(blogpath, 'w+')
            f.writelines(repr(err))
            f.close()

    代码无需使用任何第三方包,直接使用python常用的异常捕获模块try... except...finally来捕获程序中的异常,然后使用txt文件保存错误信息。

    正常运行下,结果如下:

    程序错误,会在对应程序路径下自动生成错误日志。结果如下:

    错误日志生成效果如下:

    此外,这里再介绍一种升级版,代码如下:

    import os
    import traceback
    
    if __name__ == '__main__':
        try:
            a = 1
            print('请输入一个数字')
            b = input()
            c = a-int(b)
            print('%d-%d=%d' % (a, int(b), c))
        except Exception:
            print(traceback.format_exc())
            rootDir = os.path.split(os.path.realpath(__file__))[0]
            blogpath = os.path.join(rootDir, 'test1.txt')
            f = open(blogpath, 'w+')
            f.writelines(str(traceback.format_exc()))
            f.close()

    升级版生成的错误日志如下:

             

    从生成日志结果我们可以发现升级版的错误可以定位到具体代码行,而前者只能返回错误类型。大家根据自己需求选择吧。

    好了,这就Python异常捕获和简单错误日志生成啦。希望对小伙伴们有帮助。如果有小伙伴对python打包exe感兴趣的,可以私信我。

    展开全文
  • 生成日志文件

    2018-05-24 12:41:28
    log生成日志文件log生成日志文件log生成日志文件log生成日志文件
  • VC++如何生成日志

    2018-12-14 09:54:16
    利用vc++生成日志 1,使用简单方便.只有一个头文件logfile.h include后,直接调用函数即可 2,VC6,VC7(VS2008) 兼容VC版本 3,可输出文件名及行号 4,支持多线程应用
  • python生成日志

    千次阅读 2019-06-21 14:59:18
    python里面的日志简单生成。 import logging import os.path import time # 第一步,创建一个logger logger = logging.getLogger() logger.setLevel(logging.INFO) # Log等级总开关 # 第二步,创建一个handler,...
  • Java模拟定时生成日志到文件

    千次阅读 2019-02-15 10:05:10
    命令行方式执行0x03 查看日志结果1. windows系统2. mac或者linux系统0xFF 总结 0x00 教程内容 编写Java程序 执行Java程序 查看日志结果 0x01 编写Java程序 1. 代码 import java.io.File; impor...
  • ASP搜索引擎蜘蛛爬行日志生成程序.rar
  • 先在服务器上找到:httpd.conf ...2)修改该文件中的内容,一个是错误日志,还是一个是访问日志: #ErrorLog "logs/error_log" ErrorLog "|/usr/local/apache2/bin/rotatelogs /home/jiangwei/logs/apache2/
  • 生成日志目录是日期yyyy-MM-dd 该目录下是日志文件,日志文件以小时分割,每个小时一个日志文件,求大神指导,怎么实现啊。。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 697,095
精华内容 278,838
关键字:

日志生成