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

以编程方式进行TimeBasedRollingPolicy日志

柯鸿云
2023-03-14
    CreateLogger LoggerClass=new CreateLogger();
        private final Logger logger = loggerClass.createLoggerFor("foo", "D:\\logback/testLogback.log");
logger.debug("11111");
public class CreateLogger {
    public Logger createLoggerFor(String string, String file) {
        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        PatternLayoutEncoder ple = new PatternLayoutEncoder();
    ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n");
    ple.setContext(lc);
    ple.start();
    FileAppender<ILoggingEvent> fileAppender = new FileAppender<ILoggingEvent>();
    fileAppender.setFile(file);
    fileAppender.setEncoder(ple);
    fileAppender.setContext(lc);
    fileAppender.start();

    RollingFileAppender logFileAppender = new RollingFileAppender();
    logFileAppender.setContext(lc);
    logFileAppender.setName("debug");
    logFileAppender.setEncoder(ple);
    logFileAppender.setAppend(true);
    logFileAppender.setFile(file);
    TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
    logFilePolicy.setContext(lc);
    logFilePolicy.setParent(logFileAppender);
    logFilePolicy.setFileNamePattern("D:\\logback/archived/testLogBack.%d{yyyy-MM-dd}.%i.log");
    logFilePolicy.setMaxHistory(7);
    logFilePolicy.start();

    logFileAppender.setRollingPolicy(logFilePolicy);
    logFileAppender.start();
    Logger logger = (Logger) LoggerFactory.getLogger(string);
    logger.addAppender(fileAppender);
    logger.setLevel(Level.DEBUG);
    logger.setAdditive(false); 


    logger.addAppender(logFileAppender);

    return logger;
}

我还可以在控制台中看到这些行:

14:44:16,864 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@15:83 - no applicable action for [rollingPolicy], current ElementPath  is [[configuration][appender][rollingPolicy]]
14:44:16,864 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@17:30 - no applicable action for [fileNamePattern], current ElementPath  is [[configuration][appender][rollingPolicy][fileNamePattern]]

我的应用程序服务器是weblogic 12c

共有1个答案

贺景山
2023-03-14

我自己解决如下:

PatternLayoutEncoder logEncoder = new PatternLayoutEncoder();
            logEncoder.setContext(logCtx);
            logEncoder.setPattern("%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n");
            logEncoder.start();

            ConsoleAppender logConsoleAppender = new ConsoleAppender();
            logConsoleAppender.setContext(logCtx);
            logConsoleAppender.setName("console");
            logConsoleAppender.setEncoder(logEncoder);
            logConsoleAppender.start();

            logEncoder = new PatternLayoutEncoder();
            logEncoder.setContext(logCtx);
            logEncoder.setPattern("%-12date{YYYY-MM-dd HH:mm:ss.SSS} %-5level - %msg%n");
            logEncoder.start();

            RollingFileAppender logFileAppender = new RollingFileAppender();
            logFileAppender.setContext(logCtx);
            logFileAppender.setName("logFile");
            logFileAppender.setEncoder(logEncoder);
            logFileAppender.setAppend(true);
            logFileAppender.setFile("logs/logfile.log");

            TimeBasedRollingPolicy logFilePolicy = new TimeBasedRollingPolicy();
            logFilePolicy.setContext(logCtx);
            logFilePolicy.setParent(logFileAppender);
            logFilePolicy.setFileNamePattern("logs/archived/logfile-%d{yyyy-MM-dd_HH}.log.zip");
            logFilePolicy.setMaxHistory(7);
            logFilePolicy.start();

            logFileAppender.setRollingPolicy(logFilePolicy);
            logFileAppender.start();

            Logger log = logCtx.getLogger("Main");
            log.setAdditive(false);
            log.setLevel(Level.INFO);
            log.addAppender(logConsoleAppender);
            log.addAppender(logFileAppender);

            return log;

我还激活了weblogic-application.xml中的prefer-application-packages和prefer-application-resources

我希望它能帮助别人

 类似资料:
  • 问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起

  • 问题内容: 我有以下logback.xml文件: 现在,在发生特定事件时,我想以编程方式将root记录程序的级别从 debug 更改为 error 。我不能使用变量替换,这是我必须在代码内执行的操作。 如何做呢 ?谢谢。 问题答案: 试试这个: 请注意,您还可以告诉logback定期扫描您的配置文件,如下所示:

  • 以编程方式更改我的附加程序的日志级别,或者受到其他来源的影响。 亲爱的社区。 Log4J2版本为:2.12。0 我的应用程序正在使用log4j2。xml,日志级别设置为INFO。我的应用程序也在读取另一个配置文件,我想在其中为我的用户设置日志级别,例如DEBUG。 当应用程序初始化时(从log4j2.xml),我想将all的级别更改为DEBUG from second source作为示例。所以我

  • 问题内容: 我正在尝试使用JAVA解析JFR转储。我关注了这个博客,http://hirt.se/blog/?p=446。但是现在不推荐使用这些方法。JFR到JAVA是否有任何受支持的解析器?如果不能,您能否指出我是否可以从JFR转储中检索数据? 问题答案: 正如Klara提到的那样,没有官方支持的解析器。希望JDK 9将正式支持JFR解析器。现在,您可以使用Hirt博客中提到的API 。不用担心

  • 我试图实现一个非常简单的用例,一个UI特性,其中: null 这些建议和类似的建议都不起作用。我也试着愚弄一下反应,看看我能不能做点什么!我使用了真实的DOM: 而且也没用。我甚至无法理解的一件事是这样的建议:将ref作为一个方法(我“猜测”),我甚至没有尝试它,因为我有很多这样的组件,我需要ref来进一步获得每个组件的值,我无法想象如果我的ref没有命名,我如何获得的值! 所以你能给出一个想法,

  • 问题内容: 我正在将Xcode7和Swift与Storyboards一起使用。当我打开LaunchScreen.storyboard并尝试在其上设置自定义类时,Xcode抱怨一个人不能在LaunchScreen故事板上拥有自定义类。所以我的问题是,有什么方法可以对LaunchScreen进行编程编码,因为我想避免使用IB在其上拖放元素。 问题答案: 否, 在 您的应用开始执行 之前 会显示启动屏幕