首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在使用java.util.logging.Logger时将日志写入文本文件

如何在使用java.util.logging.Logger时将日志写入文本文件
EN

Stack Overflow用户
提问于 2013-04-02 15:41:17
回答 10查看 436K关注 0票数 166

我有一种情况,我想把我创建的所有日志写到一个文本文件中。

我们使用java.util.logging.Logger接口来生成日志。

我试过了:

代码语言:javascript
运行
复制
private static Logger logger = Logger.getLogger(className.class.getName());
FileHandler fh;   
fh = new FileHandler("C:/className.log");   
logger.addHandler(fh); 

但是仍然只在控制台上获取我的日志...

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-04-02 15:46:25

请尝试此示例。这对我很管用。

代码语言:javascript
运行
复制
public static void main(String[] args) {  

    Logger logger = Logger.getLogger("MyLog");  
    FileHandler fh;  

    try {  

        // This block configure the logger with handler and formatter  
        fh = new FileHandler("C:/temp/test/MyLogFile.log");  
        logger.addHandler(fh);
        SimpleFormatter formatter = new SimpleFormatter();  
        fh.setFormatter(formatter);  

        // the following statement is used to log any messages  
        logger.info("My first log");  

    } catch (SecurityException e) {  
        e.printStackTrace();  
    } catch (IOException e) {  
        e.printStackTrace();  
    }  

    logger.info("Hi How r u?");  

}

在MyLogFile.log中生成输出

代码语言:javascript
运行
复制
Apr 2, 2013 9:57:08 AM testing.MyLogger main  
INFO: My first log  
Apr 2, 2013 9:57:08 AM testing.MyLogger main  
INFO: Hi How r u?

编辑:

要删除控制台处理程序,请使用

代码语言:javascript
运行
复制
logger.setUseParentHandlers(false);

因为ConsoleHandler是向所有记录器派生自的父记录器注册的。

票数 264
EN

Stack Overflow用户

发布于 2014-06-24 00:58:45

首先,你在哪里定义了你的记录器,从什么类\方法调用它?有一个有效的例子,就是新鲜烘焙的:

代码语言:javascript
运行
复制
public class LoggingTester {
    private final Logger logger = Logger.getLogger(LoggingTester.class
            .getName());
    private FileHandler fh = null;

    public LoggingTester() {
        //just to make our log file nicer :)
        SimpleDateFormat format = new SimpleDateFormat("M-d_HHmmss");
        try {
            fh = new FileHandler("C:/temp/test/MyLogFile_"
                + format.format(Calendar.getInstance().getTime()) + ".log");
        } catch (Exception e) {
            e.printStackTrace();
        }

        fh.setFormatter(new SimpleFormatter());
        logger.addHandler(fh);
    }

    public void doLogging() {
        logger.info("info msg");
        logger.severe("error message");
        logger.fine("fine message"); //won't show because to high level of logging
    }
}   

在你的代码中你忘了定义格式化程序,如果你需要一个简单的格式化程序,你可以像我上面提到的那样做,但是还有另一个选择,你可以自己格式化它,有一个例子(只需插入它而不是下面的代码行fh.setFormatter(新的SimpleFormatter():

代码语言:javascript
运行
复制
fh.setFormatter(new Formatter() {
            @Override
            public String format(LogRecord record) {
                SimpleDateFormat logTime = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
                Calendar cal = new GregorianCalendar();
                cal.setTimeInMillis(record.getMillis());
                return record.getLevel()
                        + logTime.format(cal.getTime())
                        + " || "
                        + record.getSourceClassName().substring(
                                record.getSourceClassName().lastIndexOf(".")+1,
                                record.getSourceClassName().length())
                        + "."
                        + record.getSourceMethodName()
                        + "() : "
                        + record.getMessage() + "\n";
            }
        });

或者任何其他你喜欢的修改。希望能有所帮助。

票数 19
EN

Stack Overflow用户

发布于 2017-01-31 13:34:52

可以通过logging.properties文件控制日志文件的位置。并且它可以作为JVM参数传递,例如:java -Djava.util.logging.config.file=/scratch/user/config/logging.properties

详情:https://docs.oracle.com/cd/E23549_01/doc.1111/e14568/handler.htm

配置文件处理程序的

若要将日志发送到文件,请将FileHandler添加到logging.properties文件的handlers属性中。这将全局启用文件日志记录。

handlers= java.util.logging.FileHandler通过设置以下属性来配置处理程序:

代码语言:javascript
运行
复制
java.util.logging.FileHandler.pattern=<home directory>/logs/oaam.log
java.util.logging.FileHandler.limit=50000
java.util.logging.FileHandler.count=1
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter

java.util.logging.FileHandler.pattern指定输出文件的位置和模式。默认设置是您的主目录。

java.util.logging.FileHandler.limit以字节为单位指定记录器写入任何一个文件的最大数量。

java.util.logging.FileHandler.count指定循环浏览多少个输出文件。

java.util.logging.FileHandler.formatter指定文件处理程序类用于格式化日志消息的java.util.logging格式化程序类。SimpleFormatter编写简短的“人类可读”的日志记录摘要。

指示java使用此配置文件而不是$JDK_HOME/jre/lib/logging.properties:

代码语言:javascript
运行
复制
java -Djava.util.logging.config.file=/scratch/user/config/logging.properties
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15758685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档