当前位置: 首页 > 知识库问答 >
问题:

Logback:使用Java主类名作为日志文件名

杨波娃
2023-03-14

我有几个可执行类,我想自动将日志文件名设置为正在执行的Java类的名称。

我知道我可以通过编程实现这一点,可能是使用反射和MDC,但是通过配置logback难道没有更简单的方法来实现这一点吗。xml

对我来说,这似乎是一个相当基本的需求,所以我很惊讶我找不到关于它的文档。

共有3个答案

益何平
2023-03-14

正如您提到的,您可以通过以下操作轻松实现:
Logger loggerA=LoggerFactory.getLogger(this.getClass(). getSimpleName());

我认为这是一个非常舒适的设置,所以Logback没有考虑允许显式xml配置。

因此,您可以从中收集所有日志。getClass()将出现在Class1和Class2中,并与包名为com的记录器连接。公司(Class1和Class2共享此名称空间):

    <appender name="MY_STUFF" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_DIR}/my_log.server_%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <logger name="com.company" level="INFO" additivity="false">
        <appender-ref ref="MY_STUFF" />
    </logger>
宗沛
2023-03-14

如果您不介意在命令行中两次指定应用程序名,那么可以指定一个java系统变量作为您选择的应用程序名,并在logback配置文件中引用该系统变量。

Eg.你的命令...

java -DAPPNAME="Class1" Class1

... 将值“Class1”作为一个java系统变量传递给logback,您可以像这样重用它。。。

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${APPNAME}.log</file>
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>
公冶俊达
2023-03-14

如果你在一个支持它的JVM上,你可以使用这个属性

<file>${sun.java.command}.log</file>

否则,您需要在logback可以使用的所有main方法中设置类似的系统属性。

 类似资料:
  • 我在记录调用类的类名时遇到问题。我在logback中编写了日志实用程序类。出于性能原因,我使用单例模式创建了记录器实用程序。但是,当我从其他类调用日志语句时,我会打印实用工具的类名,而不是调用类。 测试课就像 我得到的输出如下打印而不是LogUtilTest,我需要帮助记录我的调用类名 2014-04-14 16:47:21信息[main]MyModule[LogUtil.info:42]类名[c

  • 问题内容: 在我当前的项目中,我想按日期创建日志文件,即日志文件应驻留在 名称为date的文件夹中。归档也应在该特定文件夹中进行。 我正在使用的当前Appender看起来像这样(它会根据大小对日志文件进行归档)。 问题答案: 如fileNamePattern的文档中所述,您可以指定多个%d标记,以便将日期放入归档文件名的文件夹名称中: 请注意,只有一个%d令牌可以是主令牌,所有其他令牌必须通过传递

  • 我使用在文件中配置的logback来管理应用程序的日志。我想: 创建日志文件,这些日志文件在应用程序启动时贴上时间戳,并在应用程序的生命周期内作为单个日志文件保留。(我们可能同时运行一个应用程序的多个实例,或者在一天内运行多个实例,它们可能会运行几天。) 保持干净的日志文件目录,以便删除超过给定期间的日志。 实现第二个建议使用和,如下所示--这将日志文件保存7天。但是,这将使用一个文件来记录给定日

  • 问题内容: 我正在使用logback,并且尝试在Java程序中以编程方式设置日志文件名(类似于以编程方式设置LogbackAppender路径),并且我尝试按以下方法调整该解决方案: 在logback-test.xml中: 然后再次在我的Java程序中: 但是结果是两个日志,一个完整并按我的意愿命名,例如“ 1319041145343.log”,另一个为空并命名为“ log_file_name_I

  • 问题内容: 我们有几个同时运行的作业,它们必须为log4j使用相同的配置信息。他们都使用相同的附加程序将日志转储到一个文件中。有没有一种方法可以让每个作业动态命名其日志文件,以使它们保持独立? 谢谢 汤姆 问题答案: 您可以为每个作业传递Java系统属性吗?如果是这样,您可以像这样进行参数化: 然后在您的log4j.properties中: 您可以使用主机环境(例如)中的值填充Java系统属性,该

  • 目前,我的Spring-boot应用程序日志到一个名为:的文件,这是按预期工作,但是我希望日志文件在其末尾有一个,并在每次运行时创建一个新文件。 我尝试在<code>logback测试中实现这一点。xml文件如下所示,但它只是给出了文件名:myLog。没有时间戳的日志。 我该如何解决这个问题? 日志回测.xml: