精华内容
下载资源
问答
  • 1. 日志查看监控日志文件输出:tail -f 日志文件监控日志文件输出(基于某个关键词):tail -f 日志文件 | grep '关键词'输出最后的行数日志内容tail -行数 日志文件显示xxx.log文件里匹配???那行以及上下3行cat xxx...

    1. 日志查看

    监控日志文件输出:

    tail -f 日志文件

    监控日志文件输出(基于某个关键词):

    tail -f 日志文件 | grep '关键词'

    输出最后的行数的日志内容

    tail -行数 日志文件

    显示xxx.log文件里匹配???那行以及上下3行

    cat xxx.log | grep -C 3 '???'

    显示xxx.log文件里匹配???那行以及前3行

    cat xxx.log | grep -B 3 '???'

    显示xxx.log文件里匹配???那行以及后3行

    cat xxx.log | grep -A 3 '???'

    2. 查看CPU使用率

    执行top -c ,显示进程运行信息列表

    键入P (大写p),进程按照CPU使用率排序 键入M (大写m),进程按照内存使用率排序

    top -Hp pid,显示一个进程的线程运行信息列表即某个java进程内所有tid的cpu,men的占用

    printf "%x" xxx 可以将十进制xxx转成十六进制输出

    jstack pid | grep '十六进制的线程号' -C5 --color 输出进程号为pid,且只显示grep后的关键字相关的前后五行的堆栈信息

    3. 查看java内存

    jps 用于列出所有java相关线程的pid等信息

    jinfo pid 查看java进程的所有相关信息,特别是vm配置

    jstat -gc|gcunit pid (时间) 查看gc内存占用情况,特别注意fullgc的次数和时间以及各个内存分布的占比是否合理

    开启gc日志(发现gc异常时可以打开,比如gc突然大幅度变高) jinfo -flag +PrintGCDetails pid jinfo -flag +PrintGC pid

    关闭gc日志 jinfo -flag -PrintGCDetails pid jinfo -flag -PrintGC pid

    jstack pid > xxx.txt 导出当前的堆栈信息到xxx.txt文件

    jmap -heap pid 可以查看进程号为pid的堆栈内存信息

    jmap -histo:live pid | more 可以查看进程号为pid的存活对象的占用大小,并从大到小排序(注:该命令会导致fullgc,生产慎用)

    jmap -dump:live,format=b,file=heap.bin pid 导出堆栈信息,并保存在heap.bin文件中,可以将此文件导入到eclipse MAT进行分析

    ll /proc/${PID}/fd | wc -l 查看连接数 ll /proc/${PID}/task | wc -l (效果等同pstree -p | wc -l) 查看线程数也可以ps -o nlwp pid --查看进程里面有多少个线程数量

    4. pidstat

    pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。

    pidstat 的用法:

    pidstat [ 选项 ] [  ] [  ]

    常用的参数: -u:默认的参数,显示各个进程的cpu使用统计

    -r:显示各个进程的内存使用统计

    -d:显示各个进程的IO使用情况

    -p:指定进程号

    -w:显示每个进程的上下文切换情况

    -t:显示选择任务的线程的统计信息外的额外信息

    -T { TASK | CHILD | ALL }

    这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。

    注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

    -V:版本号

    -h:在一行上显示了所有活动,这样其他程序可以容易解析。

    -I:在SMP环境,表示任务的CPU使用率/内核数量

    -l:显示命令名和所有参数

    示例一:查看所有进程的 CPU 使用情况( -u -p ALL)

    pidstatpidstat -u -p ALL

    pidstat 和 pidstat -u -p ALL 是等效的。

    pidstat 默认显示了所有进程的cpu使用率。

    f9a56a24cc5043be46dab6b87b897af3.png

    详细说明

    • PID:进程ID
    • %usr:进程在用户空间占用cpu的百分比
    • %system:进程在内核空间占用cpu的百分比
    • %guest:进程在虚拟机占用cpu的百分比
    • %CPU:进程占用cpu的百分比
    • CPU:处理进程的cpu编号
    • Command:当前进程对应的命令

    示例二: cpu使用情况统计(-u)

    pidstat -u

    使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。

    示例三: 内存使用情况统计(-r)

    pidstat -r 

    使用-r选项,pidstat将显示各活动进程的内存使用统计:

    a91a7bd5b6e40573cae374b2fe452c7a.png
    • PID:进程标识符
    • Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
    • Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
    • VSZ:虚拟地址大小,虚拟内存的使用KB
    • RSS:常驻集合大小,非交换区五里内存使用KB
    • Command:task命令名

    示例四:显示各个进程的IO使用情况(-d)

    pidstat -d
    2394edc0133acb61666661ea3da30d85.png

    报告IO统计显示以下信息:

    • PID:进程id
    • kB_rd/s:每秒从磁盘读取的KB
    • kB_wr/s:每秒写入磁盘KB
    • kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
    • COMMAND:task的命令名

    示例五:显示每个进程的上下文切换情况(-w)

    pidstat -w -p 2831
    82da306027c3f7efd63f5be5609ae5c4.png
    • PID:进程id
    • Cswch/s:每秒主动任务上下文切换数量
    • Nvcswch/s:每秒被动任务上下文切换数量
    • Command:命令名

    示例六:显示选择任务的线程的统计信息外的额外信息 (-t)

    pidstat -t -p 2831
    164844903d0928654a3d745b94c8afa5.png
    • TGID:主线程的表示
    • TID:线程id
    • %usr:进程在用户空间占用cpu的百分比
    • %system:进程在内核空间占用cpu的百分比
    • %guest:进程在虚拟机占用cpu的百分比
    • %CPU:进程占用cpu的百分比
    • CPU:处理进程的cpu编号
    • Command:当前进程对应的命令

    示例七:pidstat -T

    pidstat -T TASKpidstat -T CHILDpidstat -T ALL

    TASK表示报告独立的task。

    CHILD关键字表示报告进程下所有线程统计信息。

    ALL表示报告独立的task和task下面的所有线程。

    注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。

    729fde7554acd4543a203c7f3dab5a81.png
    • PID:进程id
    • Usr-ms:任务和子线程在用户级别使用的毫秒数。
    • System-ms:任务和子线程在系统级别使用的毫秒数。
    • Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
    • Command:命令名
    展开全文
  • Galgo是Android日志类库,用于在屏幕上显示...可以定义屏幕上显示日志的背景颜色、文本颜色、文本大小和日志显示行数。https://github.com/inaka/galgopublic class ExampleActivity extends Activity {@Override...

    Galgo是Android日志类库,用于在屏幕上显示应用的日志信息。这对于测试人员和开发人员非常有用,可以根据屏幕上的日志文件了解应用出现BUG时发生的事情。

    可以定义屏幕上显示日志的背景颜色、文本颜色、文本大小和日志显示的行数。

    https://github.com/inaka/galgo

    public class ExampleActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_example);

    // add some customization to the log messages

    GalgoOptions options = new GalgoOptions.Builder()

    .numberOfLines(15)

    .backgroundColor(Color.parseColor("#D9d6d6d6"))

    .textColor(Color.BLACK)

    .textSize(15)

    .build();

    Galgo.enable(this, options);

    Galgo.log("I am a log message");

    }

    public void onDestroy() {

    super.onDestroy();

    // always call disable to avoid memory leaks

    Galgo.disable(this);

    }

    }

    其实就是一个Service上面显示了一个window Menifest中需要有权限

    aa0949dbbbdd653fee949746b4f9ec70.png

    改造了一下代码,

    1.把Service做成一个全局的, 而不是bind到唯一的Activity , 这才是全局的Log

    2.把GalgoOptions 放到了Galgo.java中

    /*

    * Copyright (C) 2014 Inaka.

    *

    * Licensed under the Apache License, Version 2.0 (the "License");

    * you may not use this file except in compliance with the License.

    * You may obtain a copy of the License at

    *

    * http://www.apache.org/licenses/LICENSE-2.0

    *

    * Unless required by applicable law or agreed to in writing, software

    * distributed under the License is distributed on an "AS IS" BASIS,

    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    * See the License for the specific language governing permissions and

    * limitations under the License.

    *

    * @author Henrique Boregio (henrique@inakanetworks.com)

    */

    package com.kookong.tv.debug;

    import android.content.Context;

    import android.content.Intent;

    import android.content.pm.PackageManager;

    import android.os.Handler;

    import android.os.Looper;

    import android.os.Message;

    import android.os.Parcel;

    import android.os.Parcelable;

    import android.util.Log;

    import com.hzy.tvmao.TmApp;

    public class Galgo

    {

    private static final Handler UI_HANDLER = new Handler(Looper.getMainLooper())

    {

    @Override

    public void handleMessage(Message msg) {

    if (!isServiceRunning) {//service 停止了就不要往service发消息了

    return;

    }

    String message = (String) msg.obj;

    Intent intent = new Intent(TmApp.getContext(), GalgoService.class);

    intent.putExtra(MESSAGE, message);

    TmApp.getContext().startService(intent);

    }

    };

    public static final String MESSAGE = "galgo.message";

    public static final String ARG_OPTIONS = "galgo.options";

    private static final String TAG = "Galgo";

    private static GalgoOptions sOptions;

    private static Context sContext;

    private static boolean isServiceRunning;

    /**

    * * Starts a new Galgo with custom {@link com.inaka.galgo.GalgoOptions}

    *

    * @param context

    * Context

    * @param options

    * Custom {@link com.inaka.galgo.GalgoOptions}

    */

    public static void enable(GalgoOptions options) {

    sOptions = options;

    init();

    }

    /**

    * Starts a new Galgo with default {@link com.inaka.galgo.GalgoOptions}

    *

    * @param context

    * Context

    */

    public static void enable() {

    enable(new GalgoOptions.Builder().build());

    }

    private static void init() {

    sContext = TmApp.getContext();

    checkPermission(sContext);

    // start a new service with our options

    Intent intent = new Intent(sContext, GalgoService.class);

    intent.putExtra(ARG_OPTIONS, sOptions);

    TmApp.getContext().startService(intent);

    isServiceRunning = true;

    }

    public static void disable() {

    Intent intent = new Intent(sContext, GalgoService.class);

    sContext.stopService(intent);

    sContext = null;

    isServiceRunning = false;

    }

    /**

    * Logs a String message to the screen. This String will be overlayed on top

    * of the UI elements currently displayed on screen. As a side effect, this

    * message will also be logged to the standard output via

    * {@link android.util.Log}.

    *

    * @param message

    * String to be displayed

    */

    public static void log(String message) {

    Log.i(TAG, message);

    Message msg = UI_HANDLER.obtainMessage(0, message);

    msg.sendToTarget();

    }

    private static void checkPermission(Context context) {

    String permission = "android.permission.SYSTEM_ALERT_WINDOW";

    int status = context.checkCallingOrSelfPermission(permission);

    if (status == PackageManager.PERMISSION_DENIED) {

    throw new IllegalStateException("in order to use Galgo, " + "please add the permission " + permission + " to your AndroidManifest.xml");

    }

    }

    public static final class GalgoOptions implements Parcelable

    {

    public final int numberOfLines;

    public final int backgroundColor;

    public final int textColor;

    public final int textSize;

    /**

    * Contains options for Galgo. Defines

    *

    * @param builder

    */

    private GalgoOptions(Builder builder) {

    numberOfLines = builder.numberOfLines;

    backgroundColor = builder.backgroundColor;

    textColor = builder.textColor;

    textSize = builder.textSize;

    }

    /**

    * Builder for {@link com.inaka.galgo.GalgoOptions}

    */

    public static class Builder

    {

    private int numberOfLines = 10;

    private int backgroundColor = 0xD993d2b9;

    private int textColor = 0xFFFFFFFF;

    private int textSize = 10;

    /**

    *

    * @param n

    * number of lines

    * @return

    */

    public Builder numberOfLines(int n) {

    ensurePositiveInt(n, "number of lines must be > 0");

    numberOfLines = n;

    return this;

    }

    /**

    * Sets the background color of the log messages

    *

    * @param color

    * @return

    */

    public Builder backgroundColor(int color) {

    backgroundColor = color;

    return this;

    }

    /**

    * Sets the text color of the log messages

    *

    * @param color

    * @return

    */

    public Builder textColor(int color) {

    textColor = color;

    return this;

    }

    /**

    * Sets the text size of the messages

    *

    * @param size

    * @return

    */

    public Builder textSize(int size) {

    ensurePositiveInt(size, "text size must be > 0");

    textSize = size;

    return this;

    }

    /**

    * Creates a {@link com.inaka.galgo.GalgoOptions} with the

    * customized parameters

    *

    * @return

    */

    public GalgoOptions build() {

    return new GalgoOptions(this);

    }

    }

    private static void ensurePositiveInt(int value, String msg) {

    if (value <= 0) {

    throw new IllegalArgumentException(msg);

    }

    }

    // Parcelable implementation

    private GalgoOptions(Parcel source) {

    numberOfLines = source.readInt();

    backgroundColor = source.readInt();

    textColor = source.readInt();

    textSize = source.readInt();

    }

    public static final Creator CREATOR = new Creator()

    {

    @Override

    public GalgoOptions createFromParcel(Parcel source) {

    return new GalgoOptions(source);

    }

    @Override

    public GalgoOptions[] newArray(int size) {

    return new GalgoOptions[size];

    }

    };

    @Override

    public int describeContents() {

    return 0; // No special content.

    }

    @Override

    public void writeToParcel(Parcel dest, int flags) {

    dest.writeInt(numberOfLines);

    dest.writeInt(backgroundColor);

    dest.writeInt(textColor);

    dest.writeInt(textSize);

    }

    }

    }

    /*

    * Copyright (C) 2014 Inaka.

    *

    * Licensed under the Apache License, Version 2.0 (the "License");

    * you may not use this file except in compliance with the License.

    * You may obtain a copy of the License at

    *

    * http://www.apache.org/licenses/LICENSE-2.0

    *

    * Unless required by applicable law or agreed to in writing, software

    * distributed under the License is distributed on an "AS IS" BASIS,

    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

    * See the License for the specific language governing permissions and

    * limitations under the License.

    *

    * @author Henrique Boregio (henrique@inakanetworks.com)

    */

    package com.kookong.tv.debug;

    import java.util.ArrayDeque;

    import java.util.Collection;

    import java.util.Queue;

    import android.app.Service;

    import android.content.Intent;

    import android.graphics.PixelFormat;

    import android.os.Binder;

    import android.os.IBinder;

    import android.text.Spannable;

    import android.text.SpannableString;

    import android.text.TextUtils;

    import android.text.style.BackgroundColorSpan;

    import android.view.Gravity;

    import android.view.WindowManager;

    import android.widget.TextView;

    import com.hzy.tvmao.utils.LogUtil;

    import com.hzy.tvmao.utils.SystemUtil;

    import com.kookong.tv.debug.Galgo.GalgoOptions;

    public class GalgoService extends Service

    {

    private TextView mTextView;

    private GalgoOptions mOptions;

    private final Queue mLines = new ArrayDeque<>();

    @Override

    public int onStartCommand(Intent intent, int flags, int startId) {

    LogUtil.d("onStartCommand");

    //首次创建有options

    GalgoOptions options = intent.getExtras().getParcelable(Galgo.ARG_OPTIONS);

    if (options != null) {

    mOptions = options;

    }

    //显示log的时候有Message

    String message = intent.getExtras().getString(Galgo.MESSAGE);

    if (!TextUtils.isEmpty(message)) {

    displayText(message);

    }

    return super.onStartCommand(intent, flags, startId);

    }

    @Override

    public void onCreate() {

    super.onCreate();

    mTextView = new TextView(this);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);

    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

    wm.addView(mTextView, params);

    }

    public void displayText(String text) {

    mLines.add(text);

    if (mLines.size() > mOptions.numberOfLines) {

    mLines.poll();

    }

    redraw(mLines);

    }

    private void redraw(Collection texts) {

    mTextView.setTextSize(mOptions.textSize);

    mTextView.setTextColor(mOptions.textColor);

    mTextView.setPadding(SystemUtil.getScreenWH()[0] / 4, 0, 0, 0);

    Spannable spannable = new SpannableString(TextUtils.join("\n", texts));

    spannable.setSpan(new BackgroundColorSpan(mOptions.backgroundColor), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    mTextView.setText(spannable);

    }

    @Override

    public void onDestroy() {

    super.onDestroy();

    if (mTextView != null) {

    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);

    wm.removeView(mTextView);

    }

    }

    @Override

    public IBinder onBind(Intent intent) {

    return null;

    }

    }

    另一个开源项目, 显示所有日志

    https://github.com/jgilfelt/GhostLog

    展开全文
  • 功能简介上一篇介绍了为什么打印日志、什么时候打印日志以及怎么打印...日志门面SLF4JSLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logg...

    功能简介

    上一篇介绍了为什么打印日志、什么时候打印日志以及怎么打印日志。本篇介绍下在项目开发中常见的日志组件以及关系。

    先看一张图

    d82f28cd0b041066d24f0d6ea6faafdc.png

    接口:将所有日志实现适配到了一起,用统一的接口调用。

    实现:目前主流的日志实现。

    日志门面

    SLF4J

    SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,而是通过Facade Pattern提供一些Java logging API,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。

    例子

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    public class LogTest {

    private static Log logger = LogFactory.getLog(this.getClass());

    }

    slf4j静态绑定原理:SLF4J 会在编译时会绑定org.slf4j.impl.StaticLoggerBinder; 该类里面实现对具体日志方案的绑定接入。任何一种基于slf4j 的实现都要有一个这个类。如:org.slf4j.slf4j-log4j12-1.5.6: 提供对 log4j 的一种适配实现。注意:如果有任意两个实现slf4j 的包同时出现,那么就可能出现问题(mvn dependency:tree排查)。

    common-logging

    common-logging,是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库

    common-logging动态查找原理:Log 是一个接口声明。LogFactory 的内部会去装载具体的日志系统,并获得实现该Log 接口的实现类。LogFactory 内部装载日志系统的流程如下:

    1. 首先,寻找org.apache.commons.logging.LogFactory 属性配置。
    2. 利用JDK1.3 开始提供的service 发现机制,会扫描classpah 下的META-INF/services/org.apache.commons.logging.LogFactory文件,若找到则装载里面的配置,使用里面的配置。
    3. 从Classpath 里寻找commons-logging.properties ,找到则根据里面的配置加载。
    4. 使用默认的配置:如果能找到Log4j 则默认使用log4j 实现,如果没有则使用JDK14Logger 实现,再没有则使用commons-logging 内部提供的SimpleLog 实现。

    从上述加载流程来看,只要引入了log4j 并在classpath 配置了log4j.xml ,则commons-logging 就会使log4j 使用正常,而代码里不需要依赖任何log4j 的代码。

    slf4j 与 common-logging 比较

    common-logging通过动态查找的机制,在程序运行时自动找出真正使用的日志库。由于它使用了ClassLoader寻找和载入底层的日志库, 导致了象OSGI这样的框架无法正常工作,因为OSGI的不同的插件使用自己的ClassLoader。 OSGI的这种机制保证了插件互相独立,然而却使Apache Common-Logging无法工作。

    slf4j在编译时静态绑定真正的Log库,因此可以再OSGI中使用。另外,SLF4J 支持参数化的log字符串,避免了之前为了减少字符串拼接的性能损耗而不得不写的if(logger.isDebugEnable()),现在你可以直接写:logger.debug(“current user is: {}”, user)。拼装消息被推迟到了它能够确定是不是要显示这条消息的时候,但是获取参数的代价并没有幸免。

    常见日志实现

    Log4j

    2种配置文件、3个主要组件、7种日志级别

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,可以控制日志信息输送的目的地是控制台、文件、数据库等;也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

    Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置为OFF级别,表示关闭log。

    Log4j支持两种格式的配置文件:properties和xml。包含三个主要的组件:Logger、appender、Layout。

    Log4j2

    log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。

    1. 插件式结构 Log4j 2支持插件式结构。我们可以根据自己的需要自行扩展Log4j 2. 我们可以实现自己的appender、logger、filter。 2. 配置文件优化 在配置文件中可以引用属性,还可以直接替代或传递到组件。而且支持json格式的配置文件。不像其他的日志框架,它在重新配置的时候不会丢失之前的日志文件。3. Java 5的并发性 Log4j 2利用Java 5中的并发特性支持,尽可能地执行最低层次的加锁。解决了在log4j 1.x中存留的死锁的问题。 4. 异步logger Log4j 2是基于LMAX Disruptor库的。在多线程的场景下,和已有的日志框架相比,异步的logger拥有10倍左右的效率提升。

    LogBack

    Logback是由log4j创始人设计的又一个开源日记组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日记的功能。

    Log4j 与 LogBack 比较

    LogBack作为一个通用可靠、快速灵活的日志框架,将作为Log4j的替代和SLF4J组成新的日志系统的完整实现。LOGBack声称具有极佳的性能,“ 某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LogBack中需要3纳秒,而在Log4J中则需要30纳秒。 LogBack创建记录器(logger)的速度也更快:13微秒,而在Log4J中需要23微秒。更重要的是,它获取已存在的记录器只需94纳秒,而 Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的”。

    备注常见组合

    1. slf4j+logback
    2. slf4j+log4j2
    展开全文
  • MAC Eclipse IDE for Java and Report Developers Version: Luna Release (4.4.0) 英文操作系统 1.Console窗口,空白处,右键鼠标,Preferences.... 2.显示Run/Debug下Console窗口,去掉Limit console ...

    MAC Eclipse IDE for Java and Report Developers

    Version: Luna Release (4.4.0)

    英文操作系统


    1.Console窗口,空白处,右键鼠标,Preferences....

    2.显示Run/Debug下Console窗口,去掉Limit console output,即可


    展开全文
  • Java后台日志实时显示

    千次阅读 2019-04-22 13:48:59
    本文仅是一个简单的案例,web端实时显示Java后台日志。需要频繁请求后台以获取日志,并不是长连接。 可以前端传每次想要展示的行数和从第几个字节开始(假设日志文件总共123456字节,但是只想从334字节开始展示) ...
  • 1、cat命令:功能:1)显示整个文件。示例: $cat fileName2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕。示例: $ cat file1 file2 > file说明:把档案串连接后传到基本输出(屏幕或加 ...
  • Linux系统下SSH工具打印实时日志信息

    千次阅读 2018-06-15 14:32:06
    打开SSH工具后通过命令进入到日志文件夹下,命令如下:cd /你自己的文件夹路径 例如:cd /usr/java/tomcat/logs通过命令打印实时日志信息,命令如下:tail -你要显示日志行数 日志的文件名称 例如:tail -10...
  • 和安卓是一个道理,读取json数据PHP文件:class Test{//日志路径const LOG_PATH="E:\...//显示行数const PAGES=50;public static function main(){header("content-type:text/html;charset=utf-8");if(!empt...
  • linux指令-tail

    2020-02-05 09:42:58
    用于显示指定文件末尾内容,... 显示行数(从后向前) tail -f log.log 循环读取日志文件 log.log 逐渐增加的内容 【Java面试题与答案】整理推荐 基础与语法 集合 网络编程 并发编程 Web 安全 设计模式 ...
  • 和安卓是一个道理,读取json数据 PHP文件: <?php class Test{ //日志路径 const LOG_PATH="E:\... //显示行数 const PAGES=50; public static function main(){ ...
  • Java编程错误

    2014-09-11 11:43:40
    今日做一个数据显示,...这种错误会影响程序的正常运行流程,如所对应的代码行数和错误日志中的报错不一样。第二,用debug工具去调试程序,找到具体的哪里出错的那一行,再 根据错误提示,去找到相应的程序页面。...
  • tail,more查看日志(定点和翻页)

    万次阅读 2017-07-13 14:23:45
     linux可以实现从某一段日志读取,然后用more每屏显示一定行数,  2.代码.  Java代码  tail -n 4700 aa.log |more -1000  从末尾返前4700行的位置,往下找1000行 ctrl+f快捷键翻页 .
  • linux可以实现从某一段日志读取,然后用more每屏显示一定行数, 2.代码. [code="java"] tail -n 4700 aa.log |more -1000 [/code] 从末尾返前4700行的位置,往下找1000行 ctrl+f快捷键翻页 ....
  • liferay使用小技巧

    2018-03-26 14:29:46
    错误日志显示不全,行数超出设置范围4.关于portlet的目录分析a、portlet.xml:portlet定义描述文件,这个文件是标准的portlet 2.0(JSR 268)规范的文件。在这里定义的信息为portlet的名称、初始化参数、模式类型、...
  • Log4j

    2018-01-01 13:58:26
    01. console控制台中显示行数有限。信息会丢失。 02. System.out.println()会影响我们的系统性能。 03. 如果我们需要对用户的一些行为和行为,进行分析 需要收集用户的信息,分析用户的行为,反馈给用户。 二、...
  • 实时查看作业运行日志,最大显示行数可以配置,这个功能看起来不起眼,实际应该是很有用的。后台有一个作业专门完成将运行的作业日志写入日志文件,文件按天分文件夹存放,日志文件大小可以配置,若觉得占用空间,...
  • getFileLines : 获取文件行数 getDirSize : 获取目录大小 getFileSize : 获取文件大小 getDirLength : 获取目录长度 getFileLength : 获取文件长度 getFileMD5 : 获取文件的 MD5 校验码 getFileMD5ToString : 获取...
  • Java分布式中文分词组件 - word分词 word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名...
  • EmEditor V12+注册码

    热门讨论 2013-01-22 11:53:13
    EmEditor给学习网页及程序设计的朋友提供了许多贴心的功能,它可以为HTML、CSS、PHP、ASP、Perl、PerlScript、C#、C/C++、Java、JavaScript等语言提供一些基本框架,并能将特殊的语句突出显示,让人一目了然,这为...
  • LoggingInterceptor全局拦截网络请求日志,打印Request和Response,格式化json、xml数据显示,方便与后台调试接口。 全局Cookie,支持SharedPreferences和内存两种管理模式。 通用的网络请求异常监听,根据不同的...
  • 说明:设置每页显示行数,默认是14页 用法:set pagesize 20 三、 用户管理 1. 创建用户 说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都...
  • oracle实验报告

    2019-01-10 19:29:58
    Set newpage 设置报表各页之间的行数 Spool 使SQL*PLUS将输出写入文件中 Start 使SQL*PLUS执行一个sql文件 Ttitle 设置报表每页的头标题 Break 让SQL*PLUS进行分组操作 例3 建立一个批命令文件对查询到的数据以报表...
  • 出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP简介 PHP是一种易于...
  • 13.1.4 DML错误日志 364 13.2 UPDATE 371 13.3 DELETE 376 13.4 MERGE 380 13.4.1 语法和用法 380 13.4.2 性能比较 383 13.5 小结 385 第14章 事务处理 386 14.1 什么是事务 386 14.2 事务的ACID属性 387 ...
  • 13.1.4 DML错误日志 364 13.2 UPDATE 371 13.3 DELETE 376 13.4 MERGE 380 13.4.1 语法和用法 380 13.4.2 性能比较 383 13.5 小结 385 第14章 事务处理 386 14.1 什么是事务 386 14.2 事务的ACID属性 387 ...

空空如也

空空如也

1 2
收藏数 30
精华内容 12
关键字:

java日志显示行数

java 订阅