【问题标题】:logging the exceptions to a file将异常记录到文件中
【发布时间】:2012-02-24 12:38:22
【问题描述】:

我有一个独立的班级。我必须为这个文件提供一个日志机制来记录所有发生的过程,包括异常。后来这将与一个罐子或其他东西集成在一起。什么是最好的日志记录机制,即使在集成之后也能兼容。由于我的只是一个不包含在 jar 中的类文件,是否可以使用 log4J?欢迎提出更多建议。

【问题讨论】:

  • 是的,您需要为此将 log4j jar 添加到项目的类路径中。
  • 我将 log4j 添加到类路径并添加静态变量 static Logger log = Logger.getLogger(sample.class);在我的课堂上使用 log.debug("log me");,我得到这个异常:"log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.SingleClientConnManager)。" log4j:WARN 请正确初始化log4j系统。

标签: java logging exception-handling log4j


【解决方案1】:

您可能希望使用LogBack 作为通用 slf4j 框架的实现。请注意,log4j 也是 slf4j 的实现,这意味着如果您对 slf4 接口进行编程,您可以通过将一个 jar 替换为另一个来交换 logback 和 log4j。迈出第一步,注意此介绍link 的通用导入。使用 logback,您可以使用以下内容指示您的应用在哪里找到配置文件:-Dlogback.configurationFile=path/filename.ext

您收到的异常(在您的评论中描述)意味着您可能没有配置 log4j 或者您的应用找不到配置文件。

编写您自己的记录器类或使用 util 包提供的记录器类可能不是一个好主意。..

【讨论】:

  • 我应该把属性文件放在哪里?我的只是在类路径中有一个类文件和 jar 文件。
  • 只要运行这个 System.out.println(System.getProperty("user.dir"));系统会告诉你把它放在哪里。您应该能够使用一些配置选项来更改位置,例如我对 logback 的回答中的那个。您是在使用属性文件还是带有 log4j 的 xml?在后一种情况下,也不要忘记 xsd 文件。不过,请尝试 logback!
  • 感谢格沃格。我有一个像这样的属性文件 log4j.rootLogger=INFO, CA log4j.appender.CA=org.apache.log4j.ConsoleAppenderlog4j.appender.CA.layout=org.apache.log4j.PatternLayout log4j.appender.CA.layout.ConversionPattern =%-4r [%t] %-5p %c %x - %m%n 现在这会将日志写入控制台。我想将它们写入我的 C:// 或类似的特定文件。我应该在哪里说?
  • 您需要指定一个 FileAppender (代替或除了控制台之一)。我对 log4j 配置不是很熟悉,但你可以在这里找到一个例子:vaannila.com/log4j/log4j-file-appender-example-1.html 另外,花一些时间阅读文档可能是值得的,因为这些日志框架中嵌入了大量有用的选项(RollingFiles、Filters ,压缩,SiftingAppenders(在 LogBack 中)。
  • 非常感谢格沃格。我也能够获得一些在线帮助。非常感谢您的时间。我很感激。现在我可以登录到我的 c:// 中的文件。
【解决方案2】:

你可以使用java.util.logging.Logger,它是java 1.4.2 的一部分(至少)。

但您可以做的最合适的事情是使用您知道将在您的类将被集成到项目的其余部分时使用的日志记录框架。

【讨论】:

    【解决方案3】:

    这里我可以推荐使用静态类,你可以自己定义。例如这样的:

    class Logger {
        public Logger() {
            //you can create/open a log file here
        }
        public static void log(String message, int messageType) {
            //write to the file, or whatever you want to do with the message
            System.out.println(message);
        }
    }
    

    调用新的 Logger();在程序启动期间的某个地方。现在你可以在任何地方打电话了

    Logger.log(message);
    

    在我的情况下,这已经足够了,虽然非常简单。我不熟悉 log4j 之类的库,它可能包含更多功能。

    【讨论】:

    • “实现你自己的日志框架”现在很少是正确的答案。是的,它会起作用。下游集成商将永远诅咒您的名字。我的建议是利用 JVM 中内置的日志记录,或者选择一个久经考验的真正框架,例如 log4j。
    猜你喜欢
    • 2021-06-08
    • 2020-12-09
    • 1970-01-01
    • 2012-10-06
    • 2020-02-27
    • 2021-07-09
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多