如何输出内容到系统日志显示

当前位置:&&技术问答>
怎样将shell命令的输出信息同时显示在屏幕和保存到日志文件中
&&&&来源:&互联网& 发布时间:
&&&&本文导语:&
怎样将shell命令的输出信息同时显示在屏幕和保存到日志文件中?
1>直接覆盖日志文件
2>将输出内容附加到日志文件
怎样将shell命令的输出信息同时显示在屏幕和保存到日志文件中?
1>直接覆盖日志文件
2>将输出内容附加到日志文件
一个比较笨的办法:写个shell
[zhang@localhost Shell]$ cat echo-test.sh
String=`$CMD $3 $4 $5`
echo $String
echo $String > $FILE
[zhang@localhost Shell]$ ./echo-test.sh ls /tmp/ttt
ABC ABC_1 ABC_2 ABC.bak ABC.txt alter-table-to-InnoDB.sh BC BC_1 BC_2 BC.bak BC.txt echo-test.sh myls.sh test.sh
您可能感兴趣的文章:
本站()旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。本站()站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
相关文章推荐
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,E-mail:www_169it_(请将#改为@)log4j缓存日志怎么输出到文件中?
输入手机号码,报价结果将发送到您手机
装修顾问-馨馨
4年行业经验,24h可咨询
10秒闪电通过好友
报价短信已发送到您的手机
因材料品牌及工程量不同,具体报价以量房实测为准
稍候装修管家将回电您,免费提供装修咨询服务
您的装修预算约
*装修管家将回电您,免费提供装修咨询服务
*装修管家将回电您,免费提供装修咨询服务
*因材料品牌及工程量不同,具体报价以量房实测为准
装修顾问 -馨馨
(四年装修行业经验)
微信扫一扫
3.&您家小区名称 :&&
请选择您家的装修时间
log4j缓存日志怎么输出到文件中?
提问者:祝米雪| 地点:
| 浏览次数:
106| 时间:
我来帮他解答
还可以输入1500字
已有1条回答
回答数:31467
| 被采纳数:2
1、程序本身有bug。这种情况,通常出在程序的调试阶段和beta测试版中。换正式版一般可以解决。
2、系统太新,程序太老。比如xp时代的程序在win10下运行,就经常会出现这种情况。这是不兼容的问题。
3、内存太大。老程序,没在大内存的环境中调试过,现在的电脑内存都比较大,运行比较老的程序的时候,也会因为程序不能识别内存而导致溢出。博客分类:
这几天在为自己写的一个网络爬虫加一个UI控制界面,之前的爬虫核心是以命令行启动的,所以日志信息由log4j直接输出的控制台,可是现在有了UI,就不能再将日志信息输出到控制台了,必须将日志信息以某种方式截取,输出到界面上。
在网上找了一下相关代码,确实不少,但经过实践检验之后,发现要么是代码太多太麻烦,要么是性能太差(爬虫运行时每秒钟产生日志信息超过百行很随意),大都不适用。无奈,只好自己绞尽脑汁,才勉强做出来一个能用的。现在把代码贴出来,供学习交流,欢迎拍砖!
废话不多说,看代码:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package cn.ysh.studio.gui.
import java.io.IOE
import java.io.PipedR
import java.io.PipedW
import java.io.W
import org.apache.log4j.L
import org.apache.log4j.A
import org.apache.log4j.WriterA
* 类描述:
* 重置log4j的Appender的Writer
* @author 杨胜寒
* @version 1.0
public abstract class LogAppender extends Thread {
protected PipedR
public LogAppender(String appenderName) throws IOException {
Logger root = Logger.getRootLogger();
// 获取子记录器的输出源
Appender appender = root.getAppender(appenderName);
// 定义一个未连接的输入流管道
reader = new PipedReader();
// 定义一个已连接的输出流管理,并连接到reader
Writer writer = new PipedWriter(reader);
// 设置 appender 输出流
((WriterAppender) appender).setWriter(writer);
这个类是一个基类,实际上是不能够直接使用的,由它的子类负责将来自控制台的日志信息输出到UI组件。
比如现在需要将日志信息截获,输出到一个JLabel组件,代码如下:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package cn.ysh.studio.gui.
import java.io.IOE
import java.util.S
import javax.swing.JL
* 类描述:
* 不间断地扫描输入流
* 将扫描到的字符流显示在JLabel上
* @author 杨胜寒
* @version 1.0
public class LabelLogAppender extends LogAppender {
private JL
* 默认的构造
* @param label 记录器名称,该记录器输出的日志信息将被截取并输出到指定的JLabel组件
* @throws IOException
public LabelLogAppender(JLabel label) throws IOException {
super("label");
this.label =
public void run() {
// 不间断地扫描输入流
Scanner scanner = new Scanner(reader);
// 将扫描到的字符流显示在指定的JLabel上
while (scanner.hasNextLine()) {
Thread.sleep(100);
String line = scanner.nextLine();
label.setText(line);
} catch (Exception ex) {
//异常信息不作处理
实际上,将日志信息输出到JTextArea或其他多行文本组件更加常见,比如MyEclipse或NetBeans等IDE。那么一下面的代码就展示了如何将日志截获并输出到JTextArea组件,同时自动使垂直滚动条跟随。请看到代码:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package cn.ysh.studio.gui.
import java.io.IOE
import java.util.S
import javax.swing.JScrollP
import javax.swing.JTextA
* 类描述:
* 不间断地扫描输入流
* 将扫描到的字符流显示在JTextArea上
* @author 杨胜寒
* @version 1.0
public class TextAreaLogAppender extends LogAppender {
private JTextArea textA
private JScrollP
* 默认的构造
* @param textArea 记录器名称,该记录器输出的日志信息将被截取并输出到指定的JTextArea组件
* @param scroll JTextArea组件使用的滚动面板,因为在JTextArea中输出日志时,默认会使垂直滚动条自动向下滚动,若不需要此功能,此参数可省略
* @throws IOException
public TextAreaLogAppender(JTextArea textArea, JScrollPane scroll) throws IOException {
super("textArea");
this.textArea = textA
this.scroll =
public void run() {
// 不间断地扫描输入流
Scanner scanner = new Scanner(reader);
// 将扫描到的字符流输出到指定的JTextArea组件
while (scanner.hasNextLine()) {
Thread.sleep(100);
String line = scanner.nextLine();
textArea.append(line);
textArea.append("\n");
//使垂直滚动条自动向下滚动
scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getMaximum());
} catch (Exception ex) {
//异常不做处理
按照上述方式封转之后,他们的使用就非常简单了。在窗体组件绘制完成后,就可以启动他们了:
* To change this template, choose Tools | Templates
* and open the template in the editor.
package cn.ysh.studio.gui.
import cn.ysh.studio.gui.log.LabelLogA
import cn.ysh.studio.gui.log.TextAreaLogA
import javax.swing.JF
import javax.swing.JL
import javax.swing.JOptionP
import javax.swing.JScrollP
import javax.swing.JTextA
import mons.logging.L
import mons.logging.LogF
* 类描述:
* 测试日志输出到UI组件
* @author 杨胜寒
* @version 1.0
public class LogDemoJFrame extends JFrame {
private JLabel logL
private JScrollPane logScrollP
private JTextArea logTextA
private final static Log log = LogFactory.getLog(LogDemoJFrame.class);
public LogDemoJFrame() {
logLabel = new javax.swing.JLabel();
logScrollPane = new javax.swing.JScrollPane();
logTextArea = new javax.swing.JTextArea();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
logLabel.setText(" ");
logTextArea.setColumns(20);
logTextArea.setRows(5);
logScrollPane.setViewportView(logTextArea);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(logLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 610, Short.MAX_VALUE).addContainerGap()).addComponent(logScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 630, Short.MAX_VALUE));
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(logLabel).addPreferredGap(javax.ponentPlacement.RELATED).addComponent(logScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 305, Short.MAX_VALUE)));
public void initLog() {
Thread t1, t2;
t1 = new LabelLogAppender(logLabel);
t2 = new TextAreaLogAppender(logTextArea, logScrollPane);
t1.start();
t2.start();
} catch (Exception e) {
JOptionPane.showMessageDialog(this, e, "绑定日志输出组件错误", JOptionPane.ERROR_MESSAGE);
public static void main(String[] s) {
LogDemoJFrame logDemoFrame = new LogDemoJFrame();
logDemoFrame.initLog();
logDemoFrame.setVisible(true);
for (int i = 0; i & 1000; i++) {
("测试日志输出:" + i);
很简单的一个Demo,仅供参考。
下面是我的Log4j日志配置信息:
log4j.appender.label=org.apache.log4j.ConsoleAppender
log4j.appender.label.layout=org.apache.log4j.PatternLayout
log4j.appender.label.layout.ConversionPattern=%m%n
log4j.appender.textArea=org.apache.log4j.ConsoleAppender
log4j.appender.textArea.layout=org.apache.log4j.PatternLayout
log4j.appender.textArea.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}
log4j.rootLogger=INFO,label,textArea
其实鉴于上述方法,还可以实现更多自定义log4j日志输出功能,在此不再赘述。
原创文章,转载请注明出处:
浏览: 216855 次
来自: 上海
楼主你这个右上角的button按钮控件布局是怎么弄的啊
没有AWTUtilities这个类怎么办呀!!!
还有如果我想放一组user对象而不是一个怎么办呢?
请问userList.*是什么意思?
好心博主,我也想要份源码!
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 82, 距离下一级还需 118 积分
论坛徽章:0
如何将一shell脚本中的每一步命令执行结果输出到指定日志文件中(也就是若采用手工逐条执行时屏幕显示的内容),以便事后查询
比如shell脚本一开头为定义一日志文件
log_file=&HOME&/log/log.&$TODAY&
一系列命令
把以上命令执行情况最后输出到 $log_file中
大富大贵, 积分 11169, 距离下一级还需 8831 积分
论坛徽章:38
一系列命令&&&&$log_file复制代码
稍有积蓄, 积分 337, 距离下一级还需 163 积分
论坛徽章:0
如果全部都要重定向的话每一条命令后面&&并不方便,可以这么做。
在开头就声明exec 1&&$log_file复制代码表示将脚本中所有的正确输出全部追加到$log_file,错误信息会输出到stdout。
如果想把错误信息也输出到$log_file,那么只需要补一句exec 2 && $log_file复制代码就可以了
白手起家, 积分 82, 距离下一级还需 118 积分
论坛徽章:0
若在执行这个脚本时,这样做是不是也是输出所有到日志中
./test.sh&log.log
单这种好像不显屏了,若显屏,是否用tee
小富即安, 积分 3309, 距离下一级还需 1691 积分
论坛徽章:13
脚本里面加上-x,重定向到文件
大富大贵, 积分 12329, 距离下一级还需 7671 积分
论坛徽章:16
script.sh &/dir/logfile 2&&1
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处DOS窗口的内容输出到日志文件中 - 航宇 - 博客园
程序名 &&盘符:路径\日志文件名|type 盘符:路径\日志文件名例如列目录命令dir,列目录结果保存在D盘d.txt文件中,同时也显示出来:dir &&d:t.txt|type d:t.txt这里用&&表示追加到文件中,也可改用&,表示不追加。

我要回帖

 

随机推荐