在android中,实现输出log内容到sd卡中的文件里面,做法是:
还是相对来说,log4j,算是好用。
1.下载android的log4j的库(的封装)
去:http://code.google.com/p/android-logging-log4j/
下载对应的android-logging-log4j-1.0.3.jar,加到项目中。
2.再去下载所依赖的apache的log4j库
去:http://logging.apache.org/log4j/1.2/download.html
下载1.2系列版本的:log4j-1.2.17.zip
解压得到log4j-1.2.17.jar加到项目中。
3.写测试代码:
package com.test.usb;
import java.io.File;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import de.mindpipe.android.logging.log4j.LogConfigurator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends Activity{
private Logger gLogger;
bsit_cardreader reader;
TextView txt,txt1,txt2,txt3,txt4,txt5;
private static final String TAG = MainActivity.class.getCanonicalName();
public void configLog()
{
final LogConfigurator logConfigurator = new LogConfigurator();
logConfigurator.setFileName(Environment.getExternalStorageDirectory() + File.separator + "crifanli_log4j.txt");
// Set the root log level
logConfigurator.setRootLevel(Level.DEBUG);
// Set log level of a specific logger
logConfigurator.setLevel("org.apache", Level.ERROR);
logConfigurator.configure();
gLogger = Logger.getLogger(this.getClass());
// gLogger = Logger.getLogger("CrifanLiLog4jTest");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
configLog();
gLogger.debug("test android log to file in sd card using log4j");
txt=(TextView) findViewById(R.id.txt);
txt1=(TextView) findViewById(R.id.txt1);
txt2=(TextView) findViewById(R.id.txt2);
txt3=(TextView) findViewById(R.id.txt3);
txt4=(TextView) findViewById(R.id.txt4);
txt5=(TextView) findViewById(R.id.txt5);
reader = new bsit_cardreader();
int openResult = reader.openreader(this);
txt.setText("MainActivity--reader ="+ openResult);
Log.i(TAG, "---------------4---MainActivity--reader =" + openResult);//7
int bslot = 0 ; //非接触卡通道
byte[] atr = reader.card_poweron(bslot);
Log.i(TAG, "---------------5---MainActivity--atr =" + atr);
txt1.setText("MainActivity--reader ="+ openResult);
byte[] cmd = new byte[5];
cmd[0] = 0x00;
cmd[1] = -124;
cmd[2] = 0x00;
cmd[3] = 0x00;
cmd[4] = 0x08;
Log.i(TAG, "---------------6---MainActivity--cmd =" + cmd[1]);
txt2.setText("MainActivity--cmd ="+ cmd[1]);
byte[] resp= reader.sendapdu(bslot, 5, cmd);
for (int i = 0; i < resp.length; i++) {
Log.i(TAG, "------------7-------resp[" + i + "]=" + resp[i]);
txt3.setText("------------7-------resp[" + i + "]=" + resp[i]);
}
reader.card_poweroff(bslot);
// byte cmd = (byte) 0x84;
// Log.i(TAG, "---------------6---MainActivity--cmd =" + cmd);
}
public boolean post(byte[] paramArrayOfByte,String http) {
ByteArrayEntity arrayEntity = new ByteArrayEntity(paramArrayOfByte);
arrayEntity.setContentType("application/octet-stream");
HttpPost httpPost = new HttpPost(http);
httpPost.setEntity(arrayEntity);
DefaultHttpClient client = new DefaultHttpClient();
try {
int result=client.execute(httpPost).getStatusLine().getStatusCode();
Log.i(TAG, "post=" + result);
txt4.setText("post=" + result);
} catch (Exception e) {
throw new RuntimeException(e);
}
return false;
}
}
即可实现:
(1)可以在/mnt/sdcard中生成对应的crifanli_log4j.txt文件
(2)log输出的内容中,是DEBUG,且对应的是自己的字符串标识符CrifanLiLog4jTest
因此,可以另外多下载一个叫android-logging-log4j的项目,地址在:
http://code.google.com/p/android-logging-log4j/downloads/list,注意,原本的log4j还是需要的。
在AndroidManifest.xml中,增加如下设置:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
然后在程序中如下使用:
package com.android.myapp;
import java.io.File;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import android.app.Application;
import android.os.Environment;
import de.mindpipe.android.logging.log4j.LogConfigurator;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LogConfigurator logConfigurator = new LogConfigurator();
logConfigurator.setFileName(Environment.getExternalStorageDirectory()
+ File.separator + "MyApp" + File.separator + "logs"
+ File.separator + "log4j.txt");
logConfigurator.setRootLevel(Level.DEBUG);
logConfigurator.setLevel("org.apache", Level.ERROR);
logConfigurator.setFilePattern("%d %-5p [%c{2}]-[%L] %m%n");
logConfigurator.setMaxFileSize(1024 * 1024 * 5);
logConfigurator.setImmediateFlush(true);
logConfigurator.configure();
Logger log = Logger.getLogger(MyApplication.class);
log.info("My Application Created");
}
}
现在日志则是以:
Environment.getExternalStorageDirectory() + File.separator + "MyApp" + File.separator + "logs" + File.separator + "log4j.txt
的方式保存了。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。