鉴于Scala语言的各种优点,我决定在Scala中编写我的下一个Web应用程序.但是,我应该使用Wicket还是Lift?我对Wicket很熟悉,并且很喜欢它,但对Lift的了解很少.在这种背景下学习Lift值得努力吗?
换句话说,Lift与Wicket相比如何?鉴于网络应用程序将在Scala中,使用Lift可以让我作为开发人员的生活更轻松吗?
这个问题在SE网站上听起来像一堆类似的问题,所以我应该非常详细地提出我的问题.所以,这是项目的最小化pom.xml:
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.gmaven.runtime</groupId>
<artifactId>gmaven-runtime-1.7</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.shabunc.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
这是maven生成的依赖树.
mvn dependency:tree -Dverbose -Dincludes=org.slf4j:
[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] \- org.slf4j:slf4j-api:jar:1.6.5:compile
Run Code Online (Sandbox Code Playgroud)
现在,让我们删除排除并再次检查依赖项.我们会得到:
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.5:compile
[INFO] \- org.codehaus.gmaven.runtime:gmaven-runtime-1.7:jar:1.3:compile
[INFO] +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO] +- org.codehaus.gmaven.feature:gmaven-feature-support:jar:1.3:compile
[INFO] | \- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted …Run Code Online (Sandbox Code Playgroud) 我正在寻找具有以下功能的广义后缀树(GST)的Java实现:
从1000个字符串创建GST之后,我想知道这1000个字符串中有多少包含其他字符串''.
搜索必须快速安静,因为我需要在大约100'000个平均长度为10的候选字符串上应用搜索.
我正在尝试将日志异步打印到日志文件。所以我使用 AsyncAppender 到 RollingFileAppender。但不知何故,Logback 抛出错误未找到附加的附加程序
Logback 版本 logback-classic 1.3.0- alpha5使用
我正在创建一个 RollingFileAppender 并将其添加到 AsyncAppender。
下面是我的 logback.xml
<appender name="FILE-ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/zapp-info.log</file>
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/archived/zapp.%d{yyyy-MM-
dd}.%i.log</fileNamePattern>
<SizeBasedTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</SizeBasedTriggeringPolicy>
<totalSizeCap>20GB</totalSizeCap>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %-5level %t %c{0} %msg%n</Pattern>
</encoder>
</appender>
<appender name="ASYNC-INFO"
class="ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>256</queueSize>
<appender-ref ref="FILE-ROLLING"/>
</appender>
Run Code Online (Sandbox Code Playgroud)
控制台日志显示以下错误消息
10:26:17,566 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@3ba9ad43 - Processing appender named [ASYNC-INFO]
10:27:29,230 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@3ba9ad43 - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
10:28:24,982 |-ERROR in ch.qos.logback.classic.AsyncAppender[ASYNC-INFO] - No attached appenders found.
10:28:24,982 …Run Code Online (Sandbox Code Playgroud) 我是slf4j / logback的新手,所以我有几个问题。主要的是,我可以同时将其打印到控制台和日志文件吗?
目前,我可以将其打印到日志文件。这是logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<file>/Users/admin/testlogs/myLogFile.log</file>
<append>true</append>
<encoder>
<pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="TRACE">
<appender-ref ref="fileAppender" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在程序中,如果我有以下命令:
slf4jLogger2.warn("test");
Run Code Online (Sandbox Code Playgroud)
它将以下输出放入日志文件:
2018-02-03 21:21:10,145 [Thread name] WARN c.s.a.t.s.MyProgram - test
Run Code Online (Sandbox Code Playgroud)
我的主要问题是,如何将其也添加到控制台?
另外,是否可以像在printf语句中那样将格式化的数据放入消息中?
例如,
out.printf("Sent: (%.2f/sec for %.1f |seconds)%n", floatPerSec, elTime);
Run Code Online (Sandbox Code Playgroud)