日志相关杂

记录一个点:

很多时候,生产环境的log4j appender会设置bufferIO。但是系统意外挂了就会丢失部分日志。通过下面的语句flush log4j的日志:

LogManager.shutdown();

或者:

public static void flushAllLogs()
{
    try
    {
        Set<FileAppender> flushedFileAppenders = new HashSet<FileAppender>();
        Enumeration currentLoggers = LogManager.getLoggerRepository().getCurrentLoggers();
        while(currentLoggers.hasMoreElements())
        {
            Object nextLogger = currentLoggers.nextElement();
            if(nextLogger instanceof Logger)
            {
                Logger currentLogger = (Logger) nextLogger;
                Enumeration allAppenders = currentLogger.getAllAppenders();
                while(allAppenders.hasMoreElements())
                {
                    Object nextElement = allAppenders.nextElement();
                    if(nextElement instanceof FileAppender)
                    {
                        FileAppender fileAppender = (FileAppender) nextElement;
                        if(!flushedFileAppenders.contains(fileAppender) && !fileAppender.getImmediateFlush())
                        {
                            flushedFileAppenders.add(fileAppender);
                            //log.info("Appender "+fileAppender.getName()+" is not doing immediateFlush ");
                            fileAppender.setImmediateFlush(true);
                            currentLogger.info("FLUSH");
                            fileAppender.setImmediateFlush(false);
                        }
                        else
                        {
                            //log.info("fileAppender"+fileAppender.getName()+" is doing immediateFlush");
                        }
                    }
                }
            }
        }
    }
    catch(RuntimeException e)
    {
        log.error("Failed flushing logs",e);
    }
}

PS:可能要增加一个java代码的钩子, 在系统关闭的时候触发。  

        //增加关闭钩子
        Runtime.getRuntime().addShutdownHook(new Thread(){
            public void run(){
                     //STH TODO
            }
        });

//移除关闭钩子
Runtime.getRuntime().removeShutdownHook(hook);

  

其实是“参考” stackoverflow的:

http://stackoverflow.com/questions/3060240/how-do-you-flush-a-buffered-log4j-fileappender

时间: 2024-09-29 22:06:24

日志相关杂的相关文章

日志相关的服务器参数详解:

expire_logs_days={0..99} 设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除.默认为0,表示不启用过期自动删除功能.如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时.作用范围为全局,可用于配置文件,属动态变量. general_log={ON|OFF} 设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项.如若启用此项,其输出位置则由--log_output选项进行定义,如果log_outp

Mybatis使用之日志相关

Mybatis使用之日志相关 一:简介 Mybatis提供的日志功能可以帮助我们很只管的看到最后被执行的SQL语句.执行结果等信息.大大方便开发过程中的调试.下面主要摘自Mybatis官网. 日志介绍 Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种方式: - SLF4J - Apache Commons Logging - Log4j 2 - Log4j - JDK logging 具体选择哪个日志实现由MyBatis的内置日志工厂确定.它会使用最先找到的(按上文列举的顺序查

logback 日志相关

日志相关: logback:https://www.cnblogs.com/gavincoder/p/10091757.html https://www.cnblogs.com/hhhshct/p/9084036.html https://www.orchome.com/452 logback totalSizeCap 无效 和maxHistory无效 解决https://blog.csdn.net/wujianmin577/article/details/94634674 原文地址:https

mysql引擎和mysql日志相关总结

mysql日志 01.错误日志: 可以在my.cnf里面配置: [mysqld_safe] log-error=/data/3306/mysql_qb3306.err 02.查询日志 普通查询日志:纪录客户端连接信息和执行的sql语句信息(由于占用内存,作用也不是很大,就一般是关着的) mysql> show variables like 'general_log%'; +------------------+--------------------------+ | Variable_name

MySQL重做日志相关

Ⅰ.事务的实现 这里我们先抛出答案,通过答案再展开分析 特性 实现 A(原子性) redo C(一致性) undo I(隔离性) lock D(持久性) redo/undo 本节针对redo展开分析 Ⅱ.redo详解 2.1 redo log buffer redo就是我们常说的重做日志,用来实现持久性 mysql目录下两个ib_logfile文件,就是重做日志文件,在ssd场景下至少设置为4G redo log里面记录的是每个page修改操作的物理逻辑日志(不是完全的二进制的差异值,比如一个s

曹工改bug--这次,我遇到了一个难缠的栈溢出bug,还是日志相关的,真的难

前言 前几天,在linux上部署一个war包应用时,tomcat直接起不来,查看tomcat的日志,catalina.out里没啥特别的,但是查看localhost日志,发现栈溢出了. [[email protected] logs]# vim localhost.2019-12-26.log 26-Dec-2019 16:27:31.811 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log

MySQL慢查询日志相关的配置和使用。

MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可以记录到慢sql了,实话讲,相比较sqlserver的trace或者扩展事件(虽然此二者的作用并非仅仅如此),MySQL的配置总是给人一种非常清爽的感觉. 1,慢查询日志的打开 正常情况下,只需要在配置文件中增加slow_query_log = 1配置,即打开慢查询日志,未指定slow_query_

python 的日志相关应用

python日志主要用logging模块; 示例代码如下: #coding:utf-8 import logging class logger(): ''' %(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s ''' format_dict = { 1 : logging.Formatter('%(asctime)s - %(filename)s-[line:%(lineno)d]-%(name)s - %(le

nginx 日志相关配置总结

设置位于nginx.conf: log_format  main  '$server_name $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time $