我刚刚完成了log4j2.xml配置文件的调整,发现了一些我不太懂的东西.那是什么<Configuration status="SOME_STATUS_HERE">?
几乎在这里的所有示例中: 来自Apache的http://logging.apache.org/log4j/2.x/manual/configuration.html人员将状态添加到配置中.
例如,这是第一个:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"> <!--status="WARN" - what is this???-->
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud) 我使用gradle作为我的建设者.运行我的所有测试后,我想执行其他任务.如果没有测试失败
test.doLast { /*my task*/ }
Run Code Online (Sandbox Code Playgroud)
工作良好.但是如果至少有一个测试失败,我的任务就不会执行.
即使我的某些测试失败,有没有办法执行我的任务.
我最近切换到Apache log4j2,仍然找不到使用log4j2.xml配置hibernate日志记录的方法.
因为我无法找到解决此问题的方法,所以我仍然明确地将log4j.properties文件用于hibernate.这不是最佳解决方案,因为我的log4j2.xml使用JPA appender(将日志写入db).我不想为hibernate编写单独的逻辑.
有没有办法使用log4j2配置hibernate日志记录?
这是我面临的挑战:
我有一个servlet程序.我需要将每个用户的日志写入以该用户命名的文件夹.像这样的东西:
// stores message to David folder
// /root_path/David/logfile.log
logger.error(MarkerManager.getMarker("David"), "Error happened");
// stores message to Mark folder
// /root_path/Mark/logfile.log
logger.error(MarkerManager.getMarker("Mark"), "Something is broken");
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我使用了标记.但我真的不知道标记是否适合这项任务.
通常,我的appender应该像RollingRandomAccessFile appender一样.我想apppen for appender看起来像这样:
<RollingRandomAccessFile name="rollingFile"
fileName="logs/{markerName ?????}/movie-db.log"
filePattern="logs/log-%d{yyyy-MM-dd}-%i.log.zip"
append="false"
immediateFlush="false"
ignoreExceptions="true">
<PatternLayout pattern="%d{ISO8601} %level{length=5} [%thread] %logger - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="25 MB"/>
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingRandomAccessFile>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
为什么默认大小nvarchar为255(MSSQL Server)?我的意思是为什么不256?
我应该使用nvarchar(63)而不是nvarchar(64)等... 127而不是128?
我试图谷歌这个问题,我没有找到任何全面的答案.
编辑:
关于默认大小:这只是我的假设.Hibernate和EclipseLink(java持久性框架)将String转换为nvarchar(255),所以我认为这是一种标准.
我使用下一个技术堆栈构建我的"superWebApp":
persistence provider - Hibernate 4.x
webMvc and beans container - Spring 4.x
web containter - Tomcat 7.5.x
Run Code Online (Sandbox Code Playgroud)
我有一个任务是将所有日志写入db.分别为每个日志记录框架执行它会很痛苦.这就是为什么我需要将所有日志重定向到单个框架然后使用DBAppender不会有问题.
我在想log4j2,因为我用它来写"superWebApp"中的日志.那么有什么想法如何将所有日志从hibernate和spring重定向到log4j2?(重定向tomcat loogs也不错)?
如果不可能,也许还有另一个可以成为核心的日志框架?
我正在尝试处理重量级元素(图像)的集合.收集的大小在8000-50000个条目之间变化.但由于某些原因,在处理1800-1900条目之后,我的程序属于java.lang.OutOfMemoryError:Java堆空间.
在我的理解中每当我调用session.getTransaction().commit()程序应该释放堆内存,但看起来它永远不会发生.我做错了什么?这是代码:
private static void loadImages( LoadStrategy loadStrategy ) throws IOException {
log.info( "Loading images for: " + loadStrategy.getPageType() );
Session session = sessionFactory.openSession();
session.setFlushMode( FlushMode.COMMIT );
Query query = session.createQuery( "from PageRaw where pageType = :pageType and pageStatus = :pageStatus and sessionId = 1" );
query.setString( "pageStatus", PageStatus.SUCCESS.name() );
query.setString( "pageType", loadStrategy.getPageType().name() );
query.setMaxResults( 50 );
List<PageRaw> pages;
int resultNum = 0;
do {
session.getTransaction().begin();
log.info( "Get pages statring form " + resultNum + " position" );
query.setFirstResult( resultNum …Run Code Online (Sandbox Code Playgroud) 我们在项目中使用带有maven的webjars.所以我们有数百个JSP,代码如下:
<%--JSP CODE--%>
<script src="<c:url value="/webjars/jquery/2.2.0/jquery.min.js" />" type="text/javascript"></script>
<script src="<c:url value="/webjars/bootstrap/3.3.6/js/bootstrap.min.js" />" type="text/javascript"></script>
.........
Run Code Online (Sandbox Code Playgroud)
正如你可以猜到的那样,更新到更新版本的webjars是一项繁琐的工作.所以我正在寻找允许我导入这样的脚本的解决方案:
<%--JSP CODE--%>
<script src="<c:url value="/webjars/jquery/jquery.min.js" />" type="text/javascript"></script>
<script src="<c:url value="/webjars/bootstrap/js/bootstrap.min.js" />" type="text/javascript"></script>
.........
Run Code Online (Sandbox Code Playgroud)
基本上我想从url中删除webjar版本.你能为这个问题提出简单明了的解决方案吗?
到目前为止,我想出了资源servlet,它可以猜出url返回哪个文件.但是,此解决方案涉及应用程序启动时的完整资源扫描.
我正在尝试使用LocalDateTime解析html页面中的日期。而且我无法提出解决方案来进行以下测试。
(使用TestNG)第一行始终失败
static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss u");
@DataProvider(name = "dateTimeFormats")
public Object[][] dateTimeFormats() {
return new Object[][]{
{"Mon Jan 5 06:41:07 2015", LocalDateTime.of(2015, 1, 5, 6, 41, 7)},
{"Sun Jan 25 00:48:23 2015", LocalDateTime.of(2015, 1, 25, 0, 48, 23)},
{"Mon Aug 14 07:58:00 2006", LocalDateTime.of(2006, 8, 14, 7, 58, 0)}
};
}
@Test(dataProvider = "dateTimeFormats")
public void testParsePostDateTime(String dateTimeString, LocalDateTime expectedResult) {
LocalDateTime result = LocalDateTime.parse(dateTimeString, DATE_TIME_FORMATTER);
assertEquals(result, expectedResult);
}
Run Code Online (Sandbox Code Playgroud)
有什么想法应该使用哪种日期模式?
当我关闭我的webApp时.Tomcat不断显示SEVERE警告:
02-Mar-2014 23:07:30.890 SEVERE [http-apr-8080-exec-4] org.apache.catalina.loader.WebappClassLoader.checkThreadLocalMapForLeaks The web application [/movie-collection-0.0.2] created a ThreadLocal with
key of type [com.microsoft.sqlserver.jdbc.ActivityCorrelator$1] (value [com.microsoft.sqlserver.jdbc.ActivityCorrelator$1@520a38a8]) and a value of type [com.microsoft.sqlserver.jdbc.ActivityId] (val
ue [3488cbb4-f0e2-4505-93c4-78248b161847-2]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
02-Mar-2014 23:07:30.891 SEVERE [http-apr-8080-exec-4] org.apache.catalina.loader.WebappClassLoader.checkThreadLocalMapForLeaks The web application [/movie-collection-0.0.2] created a ThreadLocal with
key of type [com.microsoft.sqlserver.jdbc.ActivityCorrelator$1] (value [com.microsoft.sqlserver.jdbc.ActivityCorrelator$1@520a38a8]) and a value of type …Run Code Online (Sandbox Code Playgroud) 我使用的是Spring Security 3.2.3.RELEASE
这是我的WebSecurityConfigurerAdapter的代码
@Configuration
@EnableWebSecurity
public class WebSecurityContext extends WebSecurityConfigurerAdapter {
private static final Logger log = LogManager.getLogger(WebSecurityContext.class);
@Autowired
private AuthenticationProvider authenticationProvider;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
log.info("Setting AuthenticationManagerBuilder");
auth.authenticationProvider(authenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
log.info("Configuring HttpSecurity");
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:HTTP状态403 - 访问被拒绝
但如果我评论这一行:
//.antMatchers("/**").hasRole("USER")
Run Code Online (Sandbox Code Playgroud)
一切正常.这意味着(我猜)我的角色或HttpSecurity出了问题.
所以我开始调试了.我仔细检查我的UserDetails有两个带有名称的GrantedAuthorities:ADMIN,USER.
那么任何可能导致问题的想法呢?
我们有一个任务,设计一个可以下载任何网页源的类.但是,当我尝试测试我的代码并获取页面时http://anidb.net/perl-bin/animedb.pl?show=main- 没有任何工作.
像这样的标准代码失败:
import java.net.*;
import java.io.*;
public class URLReader {
public static void main(String[] args) throws Exception {
URL link = new URL("http://www.anidb.net/");
BufferedReader in = new BufferedReader(
new InputStreamReader(link.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的结果:
Šwq>²"¦§5´_ï__ÇUº=ôÙö?kŠ}~“bd`?l“Ïçz¢Çêõ>_"?j׉R“y}K¸\Ìc_DLÙªÏ_
–óMm_¼_0”•ö°ËC_aí½sî¤ìÁS ‚>dC0ìs_–y¹ñ±ÏÝÜAø%È_äÖá__æ©A@,4x„ж_ëɃ?
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一切:cookie,头文件,但似乎没有任何工作.如果你有一些暗示,我会很感激.
java ×11
hibernate ×4
log4j ×3
log4j2 ×3
logging ×3
spring ×2
tomcat ×2
automation ×1
build ×1
datetime ×1
download ×1
formatting ×1
gradle ×1
java-8 ×1
javascript ×1
jsp ×1
maven ×1
memory-leaks ×1
parsing ×1
performance ×1
security ×1
spring-mvc ×1
sql ×1
sql-server ×1
t-sql ×1
testing ×1
types ×1
webjars ×1
webpage ×1