log4j

云计算学习——5G网络技术 华为eNSP网络设备模拟器的基础安装及简单使用 阅读详情
我对log4j的要求不是很高,主要有两个用途

一) web应用程序中如何使用log4j和common-logging 包;
二) 普通的java应用程序如何使用log4j和common-logging 包;

首先先总结简单的,在普通java应用程序中如何使用log4j和common-logging 包

步骤如下:
1) 将 log4j.jar 和 common-logging.jar 两个包加入到环境变量或者classpath

2) 写log4j.xml 文件,例如:

<?xml version="1.0" encoding="utf-8">
<!doctype log4j:configuration system "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarata.apache.org/log4j/">

<appender name="file" class="org.apache.log4j.rollingfileappender">
<param name="file" value="log.log"/>
<layout class="org.apache.log4j.patternlayout">
<param name="conversionpattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>

<logger name="com.log4j.test.test" additivity="false">
<level value="debug"/>
<appender-ref ref="file"/>
</logger>

<root>
<level value="info"/>
<appender-ref ref="file"/>
</root>

</log4j:configuration>

3) 程序中使用方法:
package com.log4j.test;

import org.apache.log4j.xml.domconfigurator;

import org.apache.commons.logging.*;


class configlog4j
{
public static void config()
{
domconfigurator.configure("config/log4j.xml");
}
}
public class testlog4j {
private log log =logfactory.getlog(testlog4j.class);

public testlog4j() {
configlog4j.config();
}

public void testprint1()
{
log.debug("debug test");
log.info("info test");
log.warn("warn test");
log.error("error test");
}

public static void main(string[] args)
{
testlog4j test = new testlog4j();
test.testprint1();

}

}

ok ! 这样就会按要求打印消息了。

另附 log4j.dtd

log4j:configuration
|
+-- appender (name, class)
| |
| +-- param (name, value)
| +-- layout (class)
| |
| +-- param (name, value)
+-- logger (name, additivity)
| |
| +-- level (class, value)
| | |
| | +-- param (name, value)
| +-- appender-ref (ref)
+-- root
|
+-- param (name, class)
+-- level
| |
| +-- param (name, value)
+-- appender-ref (ref)


输出格式定义:
%m 输出代码中指定的消息
%p 输出优先级
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,windows平台为“/r/n”,unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为iso8601,也可以在其后指定格式,比如:%d{yyy mmm dd hh:mm:ss,sss},输出类似:2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。一般使用了它就不需使用%c了。

-------------------------------------------------------------------------------------------------------------------------------------------------

一、概述
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式

;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一

个配置文件来灵活地进行配置,而不需要修改应用的代码。
  
  此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中

一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将

Log4j集成到J2EE、JINI甚至是SNMP应用中。

二,使用前的准备。
1、下载log4j 地址为:http://jakarta.apache.org/log4j/docs/download.html.
2、你可能要用到的jar文件有:
   如果需要将日志发送到邮箱,则需要javamail API,JAF API (the JavaBeans Activation Framework)

下载地址:  

http://java.sun.com/products/javamail/

http://java.sun.com/beans/glasgow/jaf.html

   如果需要jms的支持,则需要jms API 下载地址为:

http://java.sun.com/products/jms/vendors.html

三, Log4j介绍
Log4j由三个重要的组件构成:日志信息的优先级 priority,日志信息的输出目的地Appender,日志信息的输

出格式(布局)layout。


1、日志的优先级,
从低到高,依次有:DEBUG,INFO,WARN,ERROR,分别用来指定这条日志信息的重要程度;如果定义了了输入的级

别为INFO,则只有等于及高于这个级别的才进行处理,此时将输入INFO,WARN,ERROR。值得注意的是,级别中还有两个关

键字,
ALL:打印所有的日志,
OFF:关闭所有的日志输出。

2、输出端 Appender

log4j提供了以下几种常用的输出目的地:
org.apache.log4j.ConsoleAppender,将日志信息输出到控制台
org.apache.log4j.FileAppender,将日志信息输出到一个文件
org.apache.log4j.DailyRollingFileAppender,将日志信息输出到一个,并且每天输出到一个新的日志文件,

按照不同的配置可以定义每月一个日志文件,或者每周,每天,每小时,每分钟等输出一个新的日志文件。
org.apache.log4j.RollingFileAppender,将日志信息输出到一个文件,通过指定文件的的尺寸,当文件大小

到达指定尺寸的时候会自动把文件改名,如名为example.log的文件会改名为example.log.1,同时产生一个新的

example.log文件。如果新的文件再次达到指定尺寸,又会自动把文件改名为example.log.2,同时产生一个example.log

文件。依此类推,直到example.log. MaxBackupIndex,MaxBackupIndex的值可在配置文件中定义。

org.apache.log4j.WriterAppender,将日志信息以流格式发送到任意指定的地方。
org.apache.log4j.jdbc.JDBCAppender,通过JDBC把日志信息输出到数据库中。
org.apache.log4j.net.SMTPAppender,将日志信息以邮件的方式发送到指定的邮箱。

3、输出格式(布局)layout
通过appender可以控制输出的目的地,而如果要控制输出的格式,就可通过log4j的layout组件来实现。通过配

置文件定义一个appender的输出格式,Log4j提供的布局模式有以下几种:
org.apache.log4j.ConsoleAppender,输出到控制台
org.apache.log4j.HTMLLayout,以HTML表格形式布局
org.apache.log4j.PatternLayout,可以灵活地指定布局模式
org.apache.log4j.SimpleLayout,包含日志信息的级别和信息字符串

值得一提的是org.apache.log4j.PatternLayout 以Pattern方式的布局,使用Pattern的方式来指定布局。

pattern 的参数如下:ConversionPattern参数的格式含义
格式名 含义
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd

HH:mm:ss },输出类似:2002-10-18- 22:10:28 ;比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
格式可以参考 java类 SimpleDateFormat,不过 按照此类的设置会影响速度。你可以选择更快的方式 %d{ISO8601},

%d{ABSOLUTE}, %d{RELATIVE}.或者使用log4j的ISO8601DateFormat, AbsoluteTimeDateFormat,

RelativeTimeDateFormat 和 DateTimeDateFormat 方式.
%f 输出日志信息所属的类的类名
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%M 输出日志信息中所发生的方法名。
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
%r 输出自应用启动到输出该日志信息所耗费的毫秒数
%t 输出产生该日志事件的线程名
四、使用
4.1.1 SimpleLayout 和 FileAppender 方式
以下是以文件的输出方式Appender和简单的布局方式SimpleLayout的例子:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class simpandfile {

   static Logger logger = Logger.getLogger(simpandfile.class);


   public static void main(String args[]) {
      SimpleLayout layout = new SimpleLayout();

      FileAppender appender = null;
      try {
         appender = new FileAppender(layout,"output1.txt",false);
      } catch(Exception e) {}

      logger.addAppender(appender);
      logger.setLevel((Level) Level.DEBUG);

      logger.debug("Here is some DEBUG");
      logger.info("Here is some INFO");
      logger.warn("Here is some WARN");
      logger.error("Here is some ERROR");
      logger.fatal("Here is some FATAL");
   }
}
       
首先实例化Logger对象。static Logger logger = Logger.getLogger(simpandfile.class);然后指定输出的方

式和布局 appender = new FileAppender(layout,"output1.txt",false);logger.addAppender(appender);
最后定义级别:logger.addAppender(appender);这样完成了log4j日志类的初始化.接着就可以进行日志输出了。这就是

log4j日志类的使用时的一般顺序。因以下程序比较简单,特别的地方将会有注释,将不再解释。

4.1.2. HTMLLayout 和 WriterAppender


import java.io.*;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.WriterAppender;
public class htmlandwrite {
   static Logger logger = Logger.getLogger(htmlandwrite.class);
   public static void main(String args[]) {
      HTMLLayout layout = new HTMLLayout();

      WriterAppender appender = null;
      try {
         FileOutputStream output = new FileOutputStream("output2.html");
         appender = new WriterAppender(layout,output);
      } catch(Exception e) {}

      logger.addAppender(appender);
      logger.setLevel((Level) Level.DEBUG);

      logger.debug("Here is some DEBUG");
      logger.info("Here is some INFO");
      logger.warn("Here is some WARN");
      logger.error("Here is some ERROR");
      logger.fatal("Here is some FATAL");
   }
}
       

4.1.3. PatternLayout and ConsoleAppender

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.ConsoleAppender;
public class consandpatt {
   static Logger logger = Logger.getLogger(consandpatt.class);
   public static void main(String args[]) {

      // Note, %n is newline
      String pattern = "Milliseconds since program start: %r %n";
             pattern += "Classname of caller: %C %n";
             pattern += "Date in ISO8601 format: %d{ISO8601} %n";
             pattern += "Location of log event: %l %n";
             pattern += "Message: %m %n %n";
     
      PatternLayout layout = new PatternLayout(pattern);
      ConsoleAppender appender = new ConsoleAppender(layout);

      logger.addAppender(appender);
      logger.setLevel((Level) Level.DEBUG);

      logger.debug("Here is some DEBUG");
      logger.info("Here is some INFO");
      logger.warn("Here is some WARN");
      logger.error("Here is some ERROR");
      logger.fatal("Here is some FATAL");
   }
}

4.2 使用配置文件来定义输出Appender和布局格式Layout

log4j支持两种方式的配置方式,.properties 二进制文件和xml文件的方式。

我们简单讲一下.properties的配置方式后,将主要讨论xml文件的配置方式。

4.2.1 我们将以.properties文件的格式定义两种输出方式,一种是输出到文件中,另一种是输出到数据库中
。

首先定义simple.properties文件,文件定义如下:

#定义了两个输出端
log4j.rootLogger = INFO,f,db


# 定义f输出到文件,并且文件是随着大小而增加的
log4j.appender.f = org.apache.log4j.RollingFileAppender
log4j.appender.f.File = F://nepalon//classes//test1.log
log4j.appender.f.MaxFileSize = 1000KB
log4j.appender.f.MaxBackupIndex = 3
log4j.appender.f.layout = org.apache.log4j.PatternLayout

log4j.appender.f.layout.ConversionPattern = %d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n

#定义db输出到数据库
log4j.appender.db = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize = 40
log4j.appender.db.Driver = com.microsoft.jdbc.sqlserver.SQLServerDriver
log4j.appender.db.URL = jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test
log4j.appender.db.User = sa
log4j.appender.db.Password =
log4j.appender.db.layout = org.apache.log4j.PatternLayout
log4j.appender.db.layout.ConversionPattern = INSERT INTO log4j (createDate, thread, priority,
category, message) values(%d{ISO8601}, %t, %-5p, %c, %m)

然后程序中将引用这配置文件。定义如下:

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class Test {

      static Logger logger = Logger.getLogger(Test.class);

      public static void main(String args[]) {

      //以property方式读到配置文件。
     PropertyConfigurator.configure ( "simple.properties" ) ;
 
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
      }
}


4.2.2 以xml配置

程序如下:
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class Test {

      static Logger logger = Logger.getLogger(Test.class);
      public static void main(String args[]) {
          //以XML方式读到配置文件。
    DOMConfigurator.configure("xmllog4jconfig.xml");

 
          logger.debug("Here is some DEBUG");
          logger.info("Here is some INFO");
          logger.warn("Here is some WARN");
          logger.error("Here is some ERROR");
          logger.fatal("Here is some FATAL");
      }
}

xmllog4jconfig.xml 如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
       
<appender name="appender" class="org.apache.log4j.FileAppender">
       <param name="File" value="Indentify-Log.txt"/>
       <param name="Append" value="false"/>
       <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
       </layout>
</appender>

<root>
       <priority value ="debug"/>
       <appender-ref ref="appender"/>
</root>

</log4j:configuration>


对比properties方式和xml方式,可以看出他们程序中,除了定义读取配置文件的方式不同外,其它的根本就没

有区别了,这也就是log4j的魅力所在了,不需要改变程序,只需要通过改变定义的配置文件,我们就可以控制日志的输出方式,是否输出,输出格式。我们可以通过定义不同的xml文件来控制输出方式.以下是各种输出方式与布局的例子。

4.2.3 比较简单的一个。
<?xml version="1.0" encoding="gb2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--
   配置输出的日志目录为在控制台。
   格式采用为PatternLoyout,并且样式为:%d{ISO8601} %r [%c :: %p %m]%n
-->  
<appender name="CA" class="org.apache.log4j.ConsoleAppender">   
       <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ISO8601} %r [%c :: %p %m]%n"/>
       </layout>
</appender>

<root>
     <priority value ="debug"/>
    <appender-ref ref="CA"/>
</root>

</log4j:configuration>

4.2.4 文件的输出 pattern的布局

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
       
<appender name="appender" class="org.apache.log4j.FileAppender">
       <param name="File" value="Indentify-Log.txt"/>
       <param name="Append" value="false"/>
       <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
       </layout>
</appender>

<root>
       <priority value ="debug"/>
    <appender-ref ref="appender"/>
</root>

</log4j:configuration>

4.2.5 控制台的输出 和简单的布局
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
       
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
       <layout class="org.apache.log4j.SimpleLayout"/>
</appender>

<root>
    <priority value ="debug" />
       <appender-ref ref="ConsoleAppender"/>
</root>

</log4j:configuration>

4.2.6 定义三种输出方式,按照不同的级别,选择不同的输出方式.debug,info,级别通过System.out来打印。
WARN,FATAL通过System.err来输出。ERROR,FATAL发送到邮箱。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
          </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
               <param name="LevelMin" value="DEBUG"/>
               <param name="LevelMax" value="INFO"/>
        </filter>
    </appender>

    <appender name="STDERR" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.err" />
        <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="[%d{ISO8601}] %-5p %c %m %n" />
          </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
               <param name="LevelMin" value="WARN"/>
              <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <!--                          -->
    <!-- Declare the SMTPAppender -->
    <!--                          -->
    <appender name="EMAIL" class="org.apache.log4j.net.SMTPAppender">
        <param name="BufferSize" value="512" />
        <param name="SMTPHost" value="mail.suiyuanwu.com" />
        <param name="From" value="log4j@server5" />
        <param name="To" value="web@suiyuanwu.com" />
        <param name="Subject" value="[SMTPAppender] Application message" />
        <layout class="org.apache.log4j.PatternLayout">
               <param name="ConversionPattern" value="[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
               <param name="LevelMin" value="ERROR"/>
               <param name="LevelMax" value="FATAL"/>
        </filter>
    </appender>

    <!--                           -->
    <!-- setup log4js root logger -->
    <!--                           -->
    <root>
          <level value="all" />
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="STDERR"/>
        <appender-ref ref="EMAIL" />
   </root>
</log4j:configuration>
   
五、参考资料
1.http://www.vipan.com/htdocs/log4jhelp.html
         Dont Use System.out.println! Use Log4j - Vipan Singla
2.http://jakarta.apache.org/log4j/docs/manual.html
Short introduction to log4j - Ceki Gülcü - March 2002
3.http://www-128.ibm.com/developerworks/cn/java/jw-log4j/
log4j提供了对日志记录的控制
4.http://logging.apache.org/log4j/docs/documentation.html
log4j提供的文档。

Rider高效调试UE引擎:无需编译源码的符号配置指南 本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。 阅读详情

相关推荐

别再翻手册了!用Materials Studio的Forcite模块,5步搞定复杂溶剂的溶解度参数计算

本文详细介绍了如何使用Materials Studio的Forcite模块,通过5个步骤快速计算复杂溶剂的溶解度参数。从分子建模、结构优化到分子动力学采样,再到最终的内聚能密度计算,该方法大幅提升了石油化工和高分子材料研发中的效率,避免了传统手册查阅和实验的繁琐过程。

weixin_28707739的博客 280

1-Log4j使用详解

我对log4j的要求不是很高,主要有两个用途 一) web应用程序中如何使用log4j和common-logging 包; 二) 普通的java应用程序如何使用log4j和common-logging 包; 首先先总结简单的,在普通java应用程序中如何使用log4j和common-logging 包 步骤如下: 1) 将 log4j.jar 和 common-logging.jar

deadswan000的专栏 856

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

log4j的配置

一,添加启用log4j的配置在web.xml中添加启动时的对应上下文参数。 &lt;context-param&gt; &lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt; &lt;param-value&gt;classpath:log4j.properties&lt;/param-value&gt; &lt;/co...

Nisweay进的专栏 296

应广单片机 按键点灯 PMS171B GPIO LED

我也是第一次使用这款单片机,参考网友的资料,写个最近简单的demo 测试用例 #include "extern.h" /*端口定义*/ BIT KEY : PA.0; BIT SW : PA.4; /*相应于main函数*/ void FPPA0 (void) { /*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/2=8M,系统时钟为8M*/ .ADJUST_IC...

大江的专栏 1000

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 325

linux下运行C,C++,JAVA的第一个test程序

linux下 ========================================== c++: mkdir 创建工作目录c++Workplace touch创建cpp文件testone.cpp vim test.cpp编辑保存 esc+:输入wq+enter退出并且保存 g++ testone.cpp 默认输出a.out文件 使用./a.out得到输出结果 或者 g++ testone.cpp hello 使用./hello得到输出结果 =========================.

qq_36136176的博客 401

ExcelVBA批量添加PDF文件

如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。 图1 根据B列的图号在N列嵌入对应的PDF文件 图2 PDF文件 图3 文件格式 Sub 导入文件() Ap...

qq389445046的博客 5578

Hibernate4.3.1搭建Log4J日志环境

参考:http://blog.youkuaiyun.com/lin062854/article/details/9124731 导语:原项目中使用了log4j-1.2.8.jar,在 引入hibernate包后,提示报错,在构建路径中将log4j-1.2.8.jar删除后正常。但记录日志还需要用到log4j,以下方法可解决上述错误。 1、首先加入slf4j的jar包,即slf4j-api-

路虽远,行则将至;事虽难,做则必成! 3646

滑块逆向及流程分析

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

pyzzd的博客 8008

超导电动悬浮系统一体化地面线圈电-热-力特性研究——基于ANSYS Maxwell与Workbench的多物理场联合仿真

摘要:超导电动悬浮(EDS)系统的地面线圈在运行中面临电-热-力多物理场强耦合挑战。本文基于ANSYS Maxwell和Workbench平台,提出一套联合仿真方法,对地面线圈进行高保真多物理场耦合分析。研究通过建立参数化三维电磁模型,计算瞬态涡流损耗和电磁力分布,并顺序耦合至热分析和结构分析,揭示电-热-力特性的相互影响机制。该方法为地面线圈的优化设计、材料选型和可靠性评估提供了理论依据和仿真工具支撑。 关键词:超导电动悬浮;地面线圈;多物理场耦合;联合仿真;ANSYS

huanghm88的专栏 376

两个log4j.properties文件

 T同事给我发的一个。# An example log4j configuration file that outputs both to System.out# and a file named test.  # For the general syntax of property based configuration files see the# documenation o

eyeqq的专栏 1255

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

日志框架log4j升级至log4j2

大家好,我是默语,擅长全栈开发、运维和人工智能技术。在这篇博客中,我将详细介绍如何将日志框架从Log4j升级到Log4j2,确保在项目中实现更高效、更安全的日志管理。关键词:Log4j2升级、日志框架、Java日志、SLF4J、Log4j2配置。升级步骤具体操作删除Log4j核心包注释Log4j依赖,并排除第三方包引入的Log4j引入Log4j2和SLF4J桥接包添加Log4j2核心包和SLF4J与Log4j2的桥接包修改日志打印代码使用SLF4J的LoggerFactory进行日志打印。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 6万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

log4j与log4j2性能对比及log4j升级至log4j2方案

1.前言 之前某个服务在压测环境中出现了问题,分析之后得知是log4jLogger对象争用厉害,很多线程阻塞在此。 以上问题证明log4j在高并发高QPS情况下,是存在性能问题的。 之后把log4j升级成了log4j2,并采取异步日志模式,解决了因日志造成的性能问题。 2.性能对比 关于log4j与log4j2的性能对比文章有很多,本文不过多描述,给出几张结论图及原文链接,作为参考...

韩超的博客 (hanchao5272) 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

八十六、Log4j与Log4j2 你真的明白了吗?

一个完整的软件,日志是必不可少的。程序从开发、测试、维护、运行等环节,都需要向控制台或文件等位置输出大量信息。这些信息的输出, 在很多时候是使用System.out.println()无法完成的。 日志信息根据用途与记录内容的不同,分为调试日志、运行日志、异常日志等。用于日志记录的技术很多,如 jdk 的 logger 技术,apache 的 log4j、log4j2 技术等。 Log4j 的全称为 Log for java,即,专门用于 java 语言的日志记录工具。其目前有两个版本:Log4j 与.

2076

log4j和log4j2配置详解

文章目录1 log4j或log4j2配置详解1.1 pom.xml文件1.2 log4j.properties的引用1.3 log4j.properties的说明1.3.1 rootLogger文件1.3.2 输出目的地appender文件1.3.2.1 ConsoleAppender1.3.2.2 FileAppender1.3.2.3 DailyRollingFileAppender1.3.2...

上善若泪 6096

Java Log4j和Log4j2的区别

Java Log4j和Log4j2的区别 一、核心JAR包 log4j核心包:log4j:log4j:[version] 而log4j2的核心包有2个: org.apache.logging.log4j:log4j-core:[version] org.apache.logging.log4j:log4j-api:[version] 二、配置文件 log4j:通过一个log4j....

zhibin的程序日记 1万+

关于slf4j、log4j、log4j2 以及使用log4j-1.2-api将log4j适配到log4j2上的案例

关于 关于slf4j、log4j、log4j2 等的概念,以及介绍将三方库中的 log4j1 输出的日志转接到log4j2上的方式。

zhy1379的博客 5208

log4j升级为log4j2(不需要改动代码)

公司的项目决定升级log4j,因为log4j2有一个自动删除日志的功能,这样可以减轻运维的一些工作,而且在多线程环境下,log4j2的异步日志系统比log4j和logback提高了十倍的性能(吞吐量和延迟率),官方原文如下: Log4j 2 contains next-generation Asynchronous Loggers based on the LMAX Disruptor libr

zouxucong的博客 2万+

【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板

SLF4J(Simple Logging Facade for Java)是一个日志框架的抽象层,可以与不同的日志实现进行绑定。它允许开发人员在代码中使用统一的日志接口,而无需关心具体的日志实现。简单来讲就是slf4j是一系列的日志门面,也可以理解为 是接口,而 和 是具体实现了这些接口的日志框架,slf4j 具备很高的易用性和很好的抽象性。Logback是Log4j的后继版本,由Log4j的作者开发。相比Log4j,Logback具有更好的性能和更丰富的功能,同时也更易于配置和扩展。Logback是

实用技术干货分享⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄对您有用的话请点个关注吧~ 2268

Log4j(四)——Log4j1与Log4j2的区别

前言 几乎每个大型应用程序都包含自己的日志或跟踪API。为了符合这一规则,欧盟SEMPRER项目决定编写自己的跟踪API。这是在1996年初。经过无数次的增强、几个版本和大量的工作之后,API演变成了log4j,这是一个流行的Java日志包。这个包是在Apache Software License下发布的,Apache Software License是由开源组织认证的完全成熟的开源许可证。 然而随着技术的发展,Log4j的结构、性能被很多新的日志框架所替代。它在设计结构上比不上slf4j,在性能上比不上l

野犬17的博客 3790

Slf4j与log4j及log4j2的关系及使用方法

Slf4j与log4j及log4j2的关系及使用方法 slf4j slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如log4j或者log4j2,要在系统中使用slf4j,我们需要引入的核心包为:slf4j-api-1.6.4.jar。 如果不...

dingyufei的博客 8138

Log4j无缝升级到Log4j2+Slf4j

Step1: 修改maven项目的pom.xml 移除原有项目log4j的依赖内容模块 加入以下内容,属性部分加入 <properties> <!--设置Log4j2 跟 slfj0--> <log4j.version>2.11.2</log4j.version> <slf4j.ver...

baixf的博客 7002

log4j2模板,log4j模板,log4j相关属性

文章目录1. log4j2模板1.1 `pom.xml`依赖1.2 `log4j2.xml`配置文件1.3 java中使用2. log4j模板2.1 `pom.xml`依赖2.2 `log4j.properties` 源配置2.3 `log4j.properties` 配置解释【***】2.4 java中使用学习参考地址 1. log4j2模板 1.1 pom.xml依赖 <dependency> <groupId>org.apache.logging.log4j&l

Java小皮孩 2813

log4j升级log4j2

项目版本统一升级 主要就是三点一、去除log4j原来的相关的引用 具体是这几个包,maven相关就找对应名字就对了 这些都是关于log4j1的二、添加新的log4j2的相关引用 其中 来源https://blog.youkuaiyun.com/catoop/article/details/121858136 log4j-1.2-api.jar --> (log4j -> log4j2) 将log4j 的日志转接到log4j2日志...

qq_44181748的博客 5198

开源轮子 - Log4j和Log4j2

开源轮子 - Log4j和Log4j2

qq_43350524的博客 952
上一篇: mysql修改字段
下一篇: 一个系统多个tomcat
叶瑾g
博客等级 码龄12年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值